2013-04-09 152 views
4

我建立我的網站在這裏:argit.bounde.co.uk.scroll()多久發射一次?

我明白,這是不好用$(window).scroll();爲可以引起一些瀏覽器的問題,有關於它可能會導致問題讀取at this blog post

我有一個功能navCheck它由兩部分組成,固定導航(如果您調整瀏覽器的大小使其更窄,您將看到第二部分)並選擇哪個導航應該佔據「超過」狀態。

我對jQuery相當陌生,無法實現John的方法,它不像我放置變量的地方。所以我想我會包括一個setInterval與我的navCheck函數來控制它觸發的次數。但是我無法承受這個間隔大於1ms的左導航固定功能,否則會有明顯的跳躍。

我想知道默認情況下.scroll()會觸發多少次,什麼是最佳選擇。我是否應該將我的函數的固定部分移動到一個單獨的函數中並每隔1ms觸發一次,然後保持函數的「over」部分並每隔250ms觸發一次?或者只是讓整個事情每1ms發射一次?甚至是性能增加超過標準.scroll()

或同樣,如果你能幫助我實現約翰解決方案,這也將是一個更進一步的步驟,但我不明白我將如何實現它。

+0

對我來說,它通常被逐像素? – 2013-04-09 12:15:47

+0

這看起來像[CSS媒體查詢](https://developer.mozilla.org/en/docs/CSS/Media_queries)的工作!讓瀏覽器本身執行所有寬度計算。所有現代瀏覽器[支持他們](http://caniuse.com/#search=media) – andyb 2013-04-09 12:33:22

回答

0

您並不需要計數。答案是「很多」,並且是特定於實現的。

你的目標應該有可能是設置狀態滾動,然後檢查在一個循環狀態,使用的setTimeout。

如果你的函數是瘦的scroll|resize|mousemove|etc裏面沒有什麼東西綁到他們阻止你。

但是,當我說「瘦肉精」,我的意思是

window.onscroll = function (e) { 
    screen_obj.x = ...; 
    screen_obj.y = ... ; 
}; 

做的那個以外的投票站。設置爲60fps,或任何你想要的。
爲了記錄,幾個瀏覽器實際上不會給你1ms,他們只會給你他們最小的間隔。

0

我不知道確切的答案,但我會做的是每次都得到一個想法是什麼在真實使用情況下發生具有的console.log聲明火災。

其次無論響應它可能非常頻繁,快,所以我肯定會阻止它儘可能多的我可以爲不影響用戶體驗(這是很好的尤其要讓處理器冷卻器的移動設備)。

不過我不會用的setInterval()來阻止它。我不會在這裏描述整個問題,這只是使用setTimeout來創建一個限制遞歸函數的最佳實踐,甚至有片段和插件會進一步採取這種措施,如反彈:https://code.google.com/p/jquery-debounce/