本次移動端開發時遇見了安卓4.2系統不能觸發touchend的問題,有以下需求。
1. 橫滑輪播圖
2.下拉刷新頁面內容
3.body滾動條不能失效
開始在輪播圖touchmove事件中阻止了瀏覽器默認行為,此時touchend事件可以觸發。
//拖拽輪播圖
parentNode.addEventListener('touchmove',function(e) { e.preventDefault(); })
然后復制了一份在下拉刷新事件中(此時下拉刷新也OK了)
//下拉刷新代碼
document.addEventListener('touchmove', function(e) {
if (getTopDistance() <= 10) {
e.preventDefault();
}
});
不過此時新的問題又出來了,頁面竟然不能上下滾動了,經過分析得出結論在document的touchmove事件中阻止了瀏覽器默認行為導致頁面不能上下滑動。
最終參考了老外的一篇文章解決此問題。(橫滑炒過7認為是拖拽錄播圖)
parentNode.addEventListener('touchmove',function(e) {
var _x = e.touches[0].pageX;
if((Math.abs(_x-parentNode.startX)>7)){
e.preventDefault();
}
e.stopPropagation();
})
下拉刷新時也加上判斷條件決定是否阻止瀏覽器默認行為(豎直滾動超過10阻止瀏覽器默認行為)
document.addEventListener('touchmove', function(e) {
if (getTopDistance() <= 10) {//當滾動條位置小於10
// alert('<');
var _x = e.touches[0].pageX;
var _y = e.touches[0].pageY;
if (_y - obj.y > 10) {//滾動距離大於10
e.preventDefault();
}
}
});
/*獲得滾動條位置
*/
function getTopDistance() {
return document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
}
