在开发的时候遇到了移动端滚动问题,在网上找了不少办法都不行,因而本身试了下面这个方法可行。发出来但愿能帮助更多的同窗,你们有更好的方法也欢迎在下面分享出来~函数
这里面涉及到函数节流的知识,详见JavaScript 节流函数 Throttle 详解.net
var startY, endY; // 记录滑动的开始Y坐标和当前Y坐标 var timer = null; var previous = null; var atleast = 10; $('body').on('touchstart',function(e){ startY = e.originalEvent.changedTouches[0].pageY; }); // 禁用手机默认的触屏滚动行为 $('body').on('touchmove', function (e) { // 若target不在排行榜里 if(!$(e.target).is($('.list')) && !$(e.target).parents('.list').length > 0){ e.preventDefault(); } // 若target在排行榜里 else{ // 函数节流 var now = +new Date(); if(!previous){ checkScroll(e); previous = now; } if (now - previous > atleast){ checkScroll(e); // 重置上一次开始时间为本次结束时间 previous = now; } else{ clearTimeout(timer); timer = setTimeout(function(){ checkScroll(e); },200); } } }); function checkScroll(e){ console.log("check"); endY = e.originalEvent.changedTouches[0].pageY; // 若已经移到页面最上方,则不容许再向下滑动 if($('.list').scrollTop() == 0 && endY > startY){ e.preventDefault(); } // 若已经移到页面最下方,则不容许再向上滑动 if($('.list').scrollTop() + $('.list').height() == $('.list')[0].scrollHeight && endY < startY){ e.preventDefault(); } }