2011-12-02 9 views

Odpowiedz

2

Podczas przeglądania raportów o błędach dotyczących tego problemu znalazłem this JavaScript library, który rozwiązuje problem za pomocą zdarzeń dotykowych. Co więcej, podobno zostało to naprawione w Honeycomb, więc mam nadzieję, że poprawka trafi w ludzi, gdy tylko zaczną budować Ice Cream Sandwich.

3

Kolejny szybki fix dla Chrome dla Androida (http://chris-barr.com/index.php/entry/scrolling_a_overflowauto_element_on_a_touch_screen_device/)

Najpierw utworzyć funkcję, by sprawdzić, czy jest to dotykowy urządzenia ...

function isTouchDevice(){ 
    try { 
    document.createEvent("TouchEvent"); 
    return true; 
    } catch(e) { 
    return false; 
    } 
} 

potem działać, aby div przewijalną

function touchScroll(id){ 
    if(isTouchDevice()){ //if touch events exist... 
    var el = document.getElementById(id); 
    var scrollStartPos = 0; 

    document.getElementById(id).addEventListener("touchstart", function(event){ 
     scrollStartPos = this.scrollTop + event.touches[0].pageY; 
     event.preventDefault(); 
    }, false); 

    document.getElementById(id).addEventListener("touchmove", function(event){ 
     this.scrollTop = scrollStartPos - event.touches[0].pageY; 
     event.preventDefault(); 
    },false); 
    } 
} 

... wywołaj funkcję przekazującą identyfikator elementu

touchScroll("divIdName"); 
2

Wszystkie wersje Androida przed wersją 3.0 są objęte przepełnieniem: przewiń lub automatycznie (bug info).

Dla thoses jQuery o to szybkie poprawki:

function touchScroll(selector){ 
     var scrollStartPos = 0; 
     $(selector).live('touchstart', function(event) { 
     scrollStartPos = this.scrollTop + event.originalEvent.touches[0].pageY; 
     }); 
     $(selector).live('touchmove', function(event) { 
     this.scrollTop = scrollStartPos - event.originalEvent.touches[0].pageY; 
     }); 
} 

a następnie w przypadku korzystania modernizr:

if (Modernizr.touch) { 
    touchScroll($('.myScrollableContent')) 
} 

ale to nie jest idealny, ponieważ wszystkie urządzenia dotykowe-stanie będzie mieć ten.

Jeśli używasz PhoneGap można zrobić (gdzieś po PhoneGap inited):

if (window.device && device.platform=="Android" && parseInt(device.version) < 3){ 
    touchScroll($('.myScrollableContent')) 
} 
+2

Dla klikalne linki itp do pracy wewnątrz funkcją przewijania zawartości, trzeba usunąć 'event.preventDefault();' z wydarzenie 'touchstart'. – awe

+0

to prawda! dzięki za wskazanie tego. Usuwam to z mojej odpowiedzi. –

+0

Nie działa w wersjach Androida starszych niż 3.0 – eversor

Powiązane problemy