本次移動端開發時遇見了安卓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;
}