W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
調整文檔視圖(窗口)的大小時將觸發(fā)resize事件。
在某些早期的瀏覽器中,可以在任何HTML元素上注冊resize事件處理程序。仍然可以設置onresize屬性或使用addEventListener()在任何元素上設置處理程序。但是,resize事件僅在window對象(document.defaultView)上觸發(fā)(發(fā)送)。只有在window對象上注冊的處理程序才會收到事件。
有一個新提案(2017)允許所有元素通知調整大小更改。
接口 | UIEvent |
---|---|
是否冒泡 | 沒有 |
是否可取消 | 沒有 |
目標 | Document.defaultView (window ) |
默認操作 | 沒有 |
屬性 | 類型 | 描述 |
---|---|---|
target (只讀) | EventTarget | 事件目標(DOM樹中最頂層的目標)。 |
type (只讀) | DOMString | 事件的類型。 |
bubbles (只讀) | Boolean | 事件是否正常冒泡。 |
cancelable (只讀) | Boolean | 事件是否可以取消。 |
view (只讀) | WindowProxy | Document.defaultView (window 文件) |
detail (只讀) | long (float ) | 0 。 |
您可以使用window.onresize或window.addEventListener('resize',...)為resize事件注冊事件處理程序。
由于resize事件可以以高速率觸發(fā),因此事件處理程序不應執(zhí)行計算上昂貴的操作,例如DOM修改。相反,建議使用requestAnimationFrame(),setTimeout()或CustomEvent來限制事件,如下所示。
重要提示:請注意IE11需要customEvent() polyfill才能正常運行。
(function() {
var throttle = function(type, name, obj) {
obj = obj || window;
var running = false;
var func = function() {
if (running) { return; }
running = true;
requestAnimationFrame(function() {
obj.dispatchEvent(new CustomEvent(name));
running = false;
});
};
obj.addEventListener(type, func);
};
/* init - you can init any event */
throttle("resize", "optimizedResize");
})();
// handle event
window.addEventListener("optimizedResize", function() {
console.log("Resource conscious resize callback!");
});
var optimizedResize = (function() {
var callbacks = [],
running = false;
// fired on resize event
function resize() {
if (!running) {
running = true;
if (window.requestAnimationFrame) {
window.requestAnimationFrame(runCallbacks);
} else {
setTimeout(runCallbacks, 66);
}
}
}
// run the actual callbacks
function runCallbacks() {
callbacks.forEach(function(callback) {
callback();
});
running = false;
}
// adds callback to loop
function addCallback(callback) {
if (callback) {
callbacks.push(callback);
}
}
return {
// public method to add additional callback
add: function(callback) {
if (!callbacks.length) {
window.addEventListener('resize', resize);
}
addCallback(callback);
}
}
}());
// start process
optimizedResize.add(function() {
console.log('Resource conscious resize callback!')
});
(function() {
window.addEventListener("resize", resizeThrottler, false);
var resizeTimeout;
function resizeThrottler() {
// ignore resize events as long as an actualResizeHandler execution is in the queue
if ( !resizeTimeout ) {
resizeTimeout = setTimeout(function() {
resizeTimeout = null;
actualResizeHandler();
// The actualResizeHandler will execute at a rate of 15fps
}, 66);
}
}
function actualResizeHandler() {
// handle the resize event
...
}
}());
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: