2010-09-27 38 views
5

Tôi đang cố gắng phát hiện sự kiện cuộn trong trình duyệt Android (phiên bản cụ thể của tôi là 2.1, nhưng U muốn nó hoạt động trên các phiên bản cũ hơn). Điều này dường như không thể!Phát hiện sự kiện cuộn trên trình duyệt Android

đầu tiên tôi đã cố gắng này:

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

Nhưng không có gì được kích hoạt (trừ khi tải trang).

tôi nghĩ: tốt, chúng ta hãy nên điên loạn và bắt chước nó bằng cách: 1. Phát hiện touchend 2. Polling các window.pageYOffset vì vậy chúng tôi biết khi cửa sổ sẽ ngưng di chuyển 3. Kích hoạt một chức năng người sử dụng tôi muốn trên cuộn .

Thật không may, sự kiện touchend trông không được kích hoạt ... trên thực tế, khi chúng tôi không cuộn và chỉ chạm vào màn hình (touchstart + touchend), nó hoạt động. Ngay sau khi chúng tôi cuộn trang ở giữa (touchstart + touchmove + touchend), nó sẽ phá vỡ mọi thứ.

Bây giờ ví dụ cơ bản nhất của tôi chỉ chứa này:

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

Nhưng cảnh báo không xuất hiện khi chúng ta di chuyển với các ngón tay và nhả liên lạc ...

Có ai có một gợi ý ?

Cảm ơn.

Trả lời

2

Bạn có thể muốn thu thập dữ liệu nguồn cho JQuery Mobile, nó hỗ trợ trình duyệt Android và có trình xử lý sự kiện cuộn.

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); 
      }); 
     } 
}; 
Các vấn đề liên quan