2013-05-29 37 views
1

我写了一些jQuery来调整要素和关闭我的网页上所有打开弹出式窗口时,调整浏览器窗口:为什么在IE8的低缩放级别不应该触发?

addEvent({ 
     target: window, 
     eventListener: 'onresize', 
     func: function (e) { 
      resizeElements(); //This resizes loads of stuff 
      closeAllPopups(); //Closes any open popups 
     } 
    }); 

这个工作在100%缩放罚款。但是,在缩放级别低于90%的情况下,即使窗口未调整大小,onresize也会继续调用。结果是弹出窗口不会打开 - 它们立即关闭。

这似乎只发生在IE8上。它适用于Chrome。

任何想法,为什么会发生这只是一个IE8的错误?任何人都可以提出修补或解决方法吗?

+0

当resizeElements()被调用时,是不是它重新触发窗口大小调整事件? (如果元素有静态或相对位置)为什么只在IE8上?我不知道。 –

+0

不,它不会重新触发它,也许是因为resizeElements不会调整每个元素的大小,只是其中的一部分。 – Urbycoz

回答

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 
     } 
    }); 
}); 
+0

Laughably简单。但完美!谢谢 - 这对我很好。 – Urbycoz

+0

真的!高兴它的作品:) – yeyene

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可变的,但最好是使用一个局部变量。

+0

thx编辑家伙 –

+0

对不起。在这里,Debouncing是没有用的。问题是'onresize'被称为_at all_。即使窗口没有调整大小,它也会被调用。 (我会在问题中澄清我的措词) – Urbycoz

0

在浏览器本身中没有办法“修复”这个bug,所以你只需要解决一个不断触发的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 
    } 
}); 
+0

解决方法可以。但我不认为这个答案会起作用。我仍然想要在调整窗口大小时触发onresize事件。这种方法会在火灾一次后停止再次发射。 – Urbycoz

+0

不,它不。这个例子防止事件每秒发射一次以上。再次查看代码。也许你应该在说它不起作用之前尝试它。 – redline

相关问题