2011-12-02 44 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

相关问题