2013-05-09 58 views
1

我正在使用以下代码来跟踪滚动,并且希望将选定的元素变量放在事件处理程序之外,因此每次用户滚动时都不会调用它们以节省资源。下面只有当我把事件处理程序中的前两个变量的工作原理:无法访问jQuery事件处理程序中的全局变量

var recommend_con_list=$(".recommend_con_list") 
    var recommend_con=$('.recommend_con') 
    $(window).scroll(function() { 

     var y=$(window).scrollTop() 
     if(y > 82){ 
      recommend_con.css({position:"fixed",top:"0"}) 
     }else{ 
      recommend_con.css({position:"",top:""}) 
     } 
    }); 
+0

该代码是否在'document'' ready'处理程序内执行?或者'.recommend_con_list'和'.recomment_con'元素可用/呈现后?否则,选择器将无法工作,因为元素将不会被找到,并且变量将不包含元素。 – Ian 2013-05-09 04:39:33

+0

不,它们不在'documnet'''''处理程序中。我会用'ready'来尝试。 – 2013-05-09 04:41:27

+0

谢谢你现在的作品。虽然它没有太大的区别,但它仍然消耗高达20%的CPU。 – 2013-05-09 04:44:23

回答

1

如果你想进一步优化,我会用这样的:

$(document).ready(function() { 
    var recommend_con_list = $(".recommend_con_list").get(), 
     recommend_con = $('.recommend_con').get(), 
     $window = $(window); 

    $window.scroll(function() { 
     var y = $window.scrollTop(); 
     if (y > 82) { 
      for (var i = 0, j = recommend_con.length; i < j; i++) { 
       recommend_con[i].classList.add("special"); 
      } 
     } else { 
      for (var i = 0, j = recommend_con.length; i < j; i++) { 
       recommend_con[i].classList.remove("special"); 
      } 
     } 
    }); 
}); 

有了这个CSS:

<style type="text/css"> 
    .special { 
     position: fixed; 
     top: 0; 
    } 
</style> 
+0

我在做什么是不同的。我试图让一个垂直列表比其他页面元素缓慢滚动,比如'recommend_con_list.parent()。css({marginTop:(82-y)/ 3 +“px”})'它放在' recommend_con'将被固定并隐藏溢出。我的问题已经得到解答,但我会接受你的答案,因为你使用了一个变量'$(window)',我认为这有帮助。另一件事,最新的Firefox有一个非常顺利的滚动,并与此代码CPU消费增加显着不同于铬。 – 2013-05-12 02:33:46

相关问题