2011-08-23 14 views
2

我怀疑我可能在这里使用事件处理程序错误。有人可以请我指出一个正确的/更好的做法吗?我添加了一堆不必要的事件处理程序吗?

基本上我正在监视window.resize事件。如果窗口小于屏幕上的元素,我将绑定到滚动事件。我的问题是resize事件不断抛出。我认为这意味着我一直在重新认识滚动事件。这看起来很糟糕。思考一个更好的方法来做到这一点?

我可以使用一个变量来跟踪它是否已经绑定......但对我来说似乎笨重。

//when window is resized check whether the sidebar still fits on screen 
    $(window).resize(checkIt); 

    function checkIt() {  
     botOfSidebar = $(obj).height() + topOfSidebar; 
     if (botOfSidebar < $(window).height()) {  
      //discard event handler 
      $(window).unbind("scroll", dynamicallyAdjustIt); 
      fixIt();                       //fix it in place 
     } 
     else { 
      console.log("dynamically adjust it"); 
      $(window).scroll(dynamicallyAdjustIt);  
     } 
    } 

回答

1

为什么不滚动事件只是绑定一次,然后当尺寸低于阈值,更新变量来启用它?

AKA

$(window).resize(function() { }); 
$(window).scroll(function() 
{ 
    if(/* Check to see if window is greater than some set size */) 
     return; 

    // Do Logic 
}); 
+0

对不起,我刚开始到今天这个。当我知道我只需要在窗口调整大小时执行操作时,对每个滚动事件进行检查就显得很浪费。这将在我公司的网站上实现,所以我宁愿在第一时间发布它。 – mrtsherman

0

考虑一下:

$(window).bind('scroll', function() { 

    if ($(obj).height() + topOfSideBar < $(window).height()) { 
     fixIt(); 
    } else { 
     dynamicallyAdjustIt(); 
    } 

}); 
+0

查看我对Tejs的评论。如果我不需要,我宁愿不对每个滚动事件运行检查。我正在寻找更优雅的解决方案。 – mrtsherman

相关问题