2013-05-09 40 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

相關問題