onresize 事件通过监听对象的高和宽,其中任何一个属性发生变化都会触发 onresize 事件。
楼上提到的解决方法存在问题。
// 只能解决楼上提到触发两次的情况,实际浏览器的 resize 事件可能会触发 n 次,持续时间并不一定是 100 毫秒,例如用户拖动浏览器的边框,以下代码会执行多次 callback 事件;
function windowResizeEvent(callback) {
var firstFire = null;
window.onresize = function () {
if(firstFire === null) {
firstFire = setTimeout(function() {
firstFire = null;
callback();
}, 100);
}
}
}
// 改进代码
function windowResizeEvent(callback) {
window.onresize = function() {
var target = this;
if (target.resizeFlag) {
clearTimeout(target.resizeFlag);
}
target.resizeFlag = setTimeout(function() {
callback();
target.resizeFlag = null;
}, 100);
}
}
除了 window 对象,其他 html 标签好像并不支持 onresize 事件,定义了之后并不会触发。
碧霜寒冰
碧霜寒冰
764***220@2年前 (-12-19)