zoukankan      html  css  js  c++  java
  • 【兼容】移动端解决滚动穿透点击穿透

    在移动端页面上,当有 fixed 遮罩背景和弹出层时,在屏幕上滑动能够滑动背景下面的内容,这就是臭名昭著的滚动穿透问题
    解决方法一:
    css之overflow:hidden

    html, body {  
        overflow: auto;  
        height: 100%;  
    } 
    

    使用这种方法时,在与饿了么前端 mint-ui 组件库中的 Infinite scroll 存在冲突,导致在无限滚动请求下一页数据的时候请求不成功,但是如果你的页面上没有分页的,这样还是可以很好的解决滚动穿透问题

    解决方法二:
    touchmove + preventDefault
    在弹出的提示框中阻止浏览器的默认行为以及冒泡行为,在可以滑动的dom元素中取消浏览器的默认行为以及冒泡行为

    let stop = document.querySelector("#cancel");  
    stop.addEventListener("touchmove", (event) => {  
        event.preventDefault();  //阻止默认行为                 
        event.stopPropagation(); //阻止冒泡  
    }, false)  
    let cancelStop = document.querySelector(".allReason");  
    cancelStop.addEventListener("touchmove", (event) => {  
        event.returnValue = true;   //取消阻止默认行为                              
        event.cancelBubble = true;  //取消阻止冒泡                          
    }, false)  
    

    使用这种方法会有一个缺点,那就是滑动其它地方,底部页面不会滚动,但是在可以滑动的页面中,将其滑动到底部或者顶部后继续滑动,底部页面任然可以滚动

    点击穿透

    click事件在移动端会有200-300ms的延迟,是因为手机上双击屏幕,缩放功能的存在。在手机上打开页面,快速双击时,页面会被放大。所以当你在点击第一次的时候,系统会等200-300毫秒,看你会不会点第二次,如果有第二次,则会放大当前页面内容;如果没有点第二次,才会执行点击事件。

    解决方案

    只用touch-----最简单的解决方案,完美解决点击穿透事件。

    把页面内所有click全部换成touch事件(touchstart、touchend、tap),需要特别注意a标签,a标签的href也是click,需要去掉换成js控制的跳转,不用a标签其实没什么,移动app开发不用考虑SEO,即便用了a标签,一般也会去掉所有默认样式,不如直接用span。

    ps:之前有人教我解决滚动穿透这个问题,但是没有做记录。(很苦恼)

  • 相关阅读:
    mysql and与or连用时遇到的坑
    mysql : 使用不等于过滤null的问题
    Bio Nio demo
    线上服务器的cpu使用达到100%了,如何排查、定位和解决该问题?
    二叉查找树、平衡二叉树、B树、B+树、聚集索引、非聚集索引
    java实现折线图统计数据
    递归构造树
    python中获取json数组中的具体数值(调用百度AI返回的json数据)
    python中使用ajax回调函数限制
    python+flask框架——前后端数据传递
  • 原文地址:https://www.cnblogs.com/Ewarm/p/13667289.html
Copyright © 2011-2022 走看看