徹底解決低端安卓手機touchend事件不觸發(考慮scroll)


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM