2010-09-27 151 views
5

我試圖在Android瀏覽器中檢測滾動事件(我的特定版本是2.1,但是U希望它也能在舊版本上運行)。這似乎不可能!在Android瀏覽器中檢測滾動事件

我第一次嘗試這樣的:

document.addEventListener('scroll', function(){ alert('test'); }, false); 

但沒有被觸發(除了當頁面加載)。

我想:那好,我們是瘋了,並通過模擬它: 1.檢測touchend 2.輪詢window.pageYOffset所以我們知道當窗口停止滾動 3.手動觸發我要上滾動用戶功能。

不幸的是,觸發事件不會被觸發,事實上,當我們不滾動並且只點擊屏幕(touchstart + touchend)時,它就起作用。只要我們在頁面之間滾動(touchstart + touchmove + touchend),它就會打破一切。

現在我最基本的例子只包含此:

document.addEventListener('touchend', function(){ alert('test'); }, false); 

但警報顯示不出來,當我們用手指滾動和解除觸摸...

有沒有人有一個建議?

謝謝。

回答

2

您可能想要抓取JQuery Mobile的源代碼,它支持android瀏覽器並具有滾動事件偵聽器。

Or at least they say it does in the docs. :p

Here's the source

$.event.special.scrollstart = { 
    enabled: true, 

     setup: function() { 
      var thisObject = this, 
       $this = $(thisObject), 
        scrolling, 
        timer; 

      function trigger(event, state) { 
       scrolling = state; 
       var originalType = event.type; 
       event.type = scrolling ? "scrollstart" : "scrollstop"; 
       $.event.handle.call(thisObject, event); 
       event.type = originalType; 
      } 

      // iPhone triggers scroll after a small delay; use touchmove instead 
      $this.bind(scrollEvent, function(event) { 
       if (!$.event.special.scrollstart.enabled) { 
        return; 
       } 

       if (!scrolling) { 
        trigger(event, true); 
       } 

       clearTimeout(timer); 
       timer = setTimeout(function() { 
        trigger(event, false); 
       }, 50); 
      }); 
     } 
};