2011-05-12 72 views
7

基本上,我想在DOM元素滾動之前做一些預處理。問題在於滾動DOM元素後,會觸發滾動事件。我知道,當您使用鼠標滾輪滾動時,在滾動DOM元素之前,鼠標滾輪事件會被觸發,儘管它不會提供預期的滾動位置,它只是一種滾動類型。我想知道是否有任何事件會在每個滾動方法(例如,鼠標滾輪,拖動滾動條,按下向下箭頭等)時被觸發,然後纔會滾動DOM元素。它不一定是一個事件。我不想滾動到某個位置,所以scrollTo不適用。之前被觸發的事件(不是之後!)DOM元素被滾動到javascript

事件與上滾動的鏈: 用戶滾動 - > DOM元素物理滾動 - >觸發onScroll事件 - >手柄東西

事件的期望的鏈: 用戶滾動 - >某些事件被捕獲並做我想做的事 - > DOM元素物理滾動 - >火災onScroll事件 - >手柄東西

+7

我相信你運氣不好。 – epascarello 2011-05-12 16:52:40

+3

在onScroll甚至觸發時無法完成的DOM滾動之前,您想做什麼?如果您與我們分享這些信息,也許我們可以指導您選擇其他解決方案。 – 2011-05-12 17:03:00

+0

我試圖「粘住」內容。當用戶滾動並且滾動頂部達到某個像素時,一些DOM元素開始「粘住」。在短暫的時間內「粘住」(用克隆的元素替換原始元素並將其「粘住」的位置),瀏覽器似乎閃爍。如果我在滾動之前定位克隆的元素(使用鼠標滾輪事件進行測試),它不會閃爍。 – 2011-05-12 17:12:18

回答

0

繼承人您可能想嘗試的東西。

爲了讓頁面overflow:hidden不出現滾動條,請在內容上放置一個絕對定位的div,高度正確&。當該div被滾動時,您可以在重新觸發事件之前更新任何基礎內容。

你也需要通過點擊等,所以這是一個真正的黑客。像jQuery這樣的東西可以幫助觸發事件並測量內容的高度。

編輯:css pointer-events:none可能在這裏取決於瀏覽器。見https://developer.mozilla.org/en/css/pointer-events

+0

我認爲這是唯一的方法。 – 2011-05-18 18:51:55

+0

@克里斯洪:我不同意。 「指針事件」可能對Chrome,Safari和Firefox有所幫助,但除此之外,它將花費大量的JavaScript來近似鼠標位置,以便光標改變以識別鏈接。 「標題」屬性將變得毫無意義,文本選擇將變得更加困難。這絕對不是要走的路,不管是不是。一個更強大的黑客將涉及捕獲'onmousewheel','DOMMouseScroll'和'keydown'事件來檢測用戶何時滾動,但它不會幫助他們拖動滾動條。 – 2011-05-19 08:44:37

+0

再想一想,DIV不必覆蓋內容,實際上可能在右邊距上只有1px寬,導致出現一個滾動條,然後用它來捕獲和觸發所有滾動事件(它會是唯一沒有溢出的元素:隱藏)。我們可能需要一個計時器來獲取當前的文檔高度,或者構建一個跨瀏覽器「高度:100%」兼容的解決方案 – 2011-05-21 17:59:43

0

你能做的最好的是,當onScroll火災,如果從頂部scrollTop>thingToStick的距離,然後在設置position: fixedthingToStick否則,請將position設置爲任何原始內容年。從不粘貼變爲粘貼時,它會閃爍,但除此之外,您不會閃爍。

在須藤上下的代碼

onScroll = function() 
{ 
    if(scrollTop > thingToStick.y) 
     thingToStick.position = "fixed"; 
    else 
     thingToStick.position = "relative"; 
} 

在不支持fixed定位的瀏覽器,你堅持與顫動......

+0

感謝您的建議。但我們正試圖避免任何閃爍。 – 2011-05-12 17:53:23

+0

沒有什麼其他的你可以做,我很害怕.. – MicronXD 2011-05-12 17:55:06

0

之前從來沒有tryed這一點,但打破事件的鏈條,將有可能:

  1. 捕獲滾動事件
  2. 做你的東西
  3. 使用的preventDefault()和stopPropagation使用原來的(這應該是我認爲是可行的)

希望這將有助於抑制事件

  • 假一新的滾動事件。

  • +0

    在捕獲滾動事件的時候,元素已經被滾動了。 – 2011-05-16 18:26:05

    +1

    滾動是一個異步事件,這就是爲什麼它不能通過滾動事件對象阻止onscroll監聽器;) – csuwldcat 2013-07-27 12:49:16

    相關問題