或是用手划到最顶端和最底端容易出现,又或是其他操作导致,页面卡住 无法滑动,解决如下
给需要滑动的盒子添加监听事件,要是滑动到最顶部 或者最顶部 就阻止默认事件触发页面滑动
// 处理页面卡顿无法滑动
const layerBox = this.lv;
var targetY = null;
layerBox.addEventListener('touchstart', function(e) {
//clientY-客户区坐标Y 、pageY-页面坐标Y
targetY = Math.floor(e.targetTouches[0].clientY);
});
layerBox.addEventListener(
'touchmove',
function(e) {
// 检测可滚动区域的滚动事件,如果滑到了顶部或底部,阻止默认事件
var NewTargetY = Math.floor(e.targetTouches[0].clientY), //本次移动时鼠标的位置,用于计算
sTop = layerBox.scrollTop, //当前滚动的距离
sH = layerBox.scrollHeight, //可滚动区域的高度
lyBoxH = layerBox.clientHeight; //可视区域的高度
if (sTop <= 0 && NewTargetY - targetY > 0 && '鼠标方向向下-到顶') {
// console.log('条件1成立:下拉页面到顶');
e.preventDefault();
} else if (sTop >= sH - lyBoxH && NewTargetY - targetY < 0 && '鼠标方向向上-到底') {
// console.log('条件2成立:上翻页面到底');
e.preventDefault();
}
},
false,
);