在调整浏览器窗口大小时,我写了一些jquery来调整元素大小并关闭页面上所有打开的弹出窗口:
addEvent({
target: window,
eventListener: 'onresize',
func: function (e) {
resizeElements(); //This resizes loads of stuff
closeAllPopups(); //Closes any open popups
}
});
这在100%变焦时工作正常。但是,在缩放级别下,即使窗口尚未调整大小,onresize仍然会被调用。效果是弹出窗口不会打开 - 它们会立即关闭。
这似乎只发生在IE8上。它适用于Chrome。
为什么会发生这种情况的任何想法 - 它只是一个IE8错误?任何人都可以建议修复或解决方法吗?
答案 0 :(得分:1)
如果要检查窗口原始大小和重新调整大小,请尝试调用您的函数?
因此,即使你在90%的加载视图中,这个窗口大小也是原始大小,只有在你调整大小(90%视图)时,你的函数才会被调用?
$(document).ready(function(){
var original_width = $(window).width();
var original_height = $(window).height();
$(window).resize(function() {
var resize_width = $(window).width();
var resize_height = $(window).height();
if(original_width != resize_width && original_height != resize_height){
alert('You resized!');
// resizeElements(); //This resizes loads of stuff
// closeAllPopups(); //Closes any open popups
}
});
});
答案 1 :(得分:0)
您可以尝试使用计时器去除它:
addEvent({
target: window,
eventListener: 'onresize',
func: function (e) {
clearTimeout(window.resizeTimeout);
window.resizeTimeout = setTimeout(function(){
resizeElements(); //This resizes loads of stuff
closeAllPopups(); //Closes any open popups
},50);
}
});
我在这里使用全局对象窗口来设置resizeTimeout变量,但更好的方法是使用局部变量。
答案 2 :(得分:0)
没有办法在浏览器本身“修复”这个错误,所以你只需要解决一个不断触发的resize事件。所以烤是正确的使用时间,但你不是在寻找计时器。您需要存储时间,然后确保在再次触发事件之前已经过了足够的时间,如下所示:
var _interval = 1000;// milliseconds
var _resize = 0;
addEvent({
target: window,
eventListener: 'onresize',
func: function (e) {
if (Date.now() - _resize < _interval)
return;
_resize = Date.now();
resizeElements(); //This resizes loads of stuff
closeAllPopups(); //Closes any open popups
}
});