h5禁止ios上拉回弹_通过js解决safari、微信下拉回弹和上拉空白的效果

摘要:在ios中为了让滑动更流畅,不那么生涩,我们需要使用-webkit-overflow-scrolling属性,但是在safari、微信等浏览器中会出现下拉回弹和上拉空白的效果,解决办法为:当滚动区滚到顶部时,手再触屏时,把把div的滚动位置向下调一点点

在ios中为了让滑动更流畅,不那么生涩,我们需要使用-webkit-overflow-scrolling属性,如下:

-webkit-overflow-scrolling : touch;

其工作原理是:在有这个属性的容器上,系统会创建了一个uiscrollview,应用于该元素并将之作为渲染对象,从而为我们实现体验流畅的触屏滑动。在ios上的表现结果令人十分满意,并且网页滑动和区域滑动的冲突同样解决的很好。


但是在safari、微信等浏览器中会出现下拉回弹和上拉空白的效果。解决办法为:当滚动区滚到顶部时,手再触屏时,把把div的滚动位置向下调一点点,这样系统就会以为还没有滚到头,就会继续滑动。


代码如下:

var overscroll = function(el) {
    el.addEventListener('touchstart', function() {
        var top = el.scrollTop
        ,totalScroll = el.scrollHeight
        ,currentScroll = top + el.offsetHeight;
        if(top === 0) {
            el.scrollTop = 1;
        }else if(currentScroll === totalScroll) {
            el.scrollTop = top - 1;
        }
    });
 
    el.addEventListener('touchmove', function(evt) {
    if(el.offsetHeight < el.scrollHeight)
        evt._isScroller = true;
    });
}
        
overscroll(document.querySelector('.scroll'));
document.body.addEventListener('touchmove', function(evt) {
    if(!evt._isScroller) {
        evt.preventDefault();
    }
});


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_1144