2011-12-02 43 views

回答

2

在瀏覽關於此問題的錯誤報告時,我發現this JavaScript library可以解決使用觸摸事件的問題。據報道,它也被固定在Honeycomb中,所以希望修補程序能夠在推出冰淇淋三明治時立即觸及人們。

3

另一個快速修復Android版Chrome(http://chris-barr.com/index.php/entry/scrolling_a_overflowauto_element_on_a_touch_screen_device/

首先創建一個函數來檢查是否是觸摸設備...

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

然後功能,使格滾動

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); 
    } 
} 

...調用傳遞元素ID的函數

touchScroll("divIdName"); 
2

3.0之前的所有android版本都會出現溢出問題:scroll或auto(bug info)。

對於這裏使用jQuery放入系統是一個快速解決方案:

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; 
     }); 
} 

,然後如果使用的Modernizr:

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

,但它的效果並不理想,因爲所有的觸摸能夠設備都會有這個。

如果使用PhoneGap的,你可以做(​​PhoneGap的inited後某處):

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

爲可點擊的鏈接等方式滾動內容裏面工作,你需要刪除'event.preventDefault();'從'touchstart'事件。 – awe

+0

這是真的!感謝您指出了這一點。我將其從我的答案中刪除。 –

+0

在3.0之前的android版本中不起作用 – eversor

相關問題