touch事件 以及 点击穿透的三种解决方法(移动端)

移动端 touch事件以及touch事件点击穿透的解决方法

提示: touchstart—>touchmove—>touchend ----> click
上面的四种点击都可以在移动端进行使用!但是有明确的区别!


移动端:touchstart — touchmove — touchend ,三个事件是专门为移动端监测,触摸开始(按下),触摸移动,触摸结束(离开),三个事件.


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、touch事件

1.touchstart----> touchmove----> touchend

touchstart :触摸(点击 按下)开始执行,在touchmove之前执行
touchmove:触摸移动的时候执行 , 在touchend之前执行
touchend:触摸结束的时候执行,在touchmove之后执行,在click事件之前执行

<body>
    <div id="d1"></div>
    <script>
        var d1 = document.getElementById("d1")
        //绑定touchstart事件
        d1.addEventListener("touchstart", function(ev) {
            console.log("touchstart:执行了")
        })
		//绑定touchmove事件
        d1.addEventListener("touchmove", function(ev) {
            //ev.targetTouches 可以获取当前第几个触摸触发
            if (ev.targetTouches.length === 1) {
                var finger = ev.targetTouches[0]
                //设置盒子的偏移
                this.style.left = finger.pageX - 75 + 'px'
                this.style.top = finger.pageY - 75 + 'px'
            }
        })
        //绑定rouchend事件
        d1.addEventListener("touchend", function(ev) {
            console.log("")
        })

        // touchstart--->touchmove--->touchend ----> click
    </script>
</body>

二、点击穿透问题

1.什么是点击穿透

点击穿透:设置B盒子在A盒子的上方,给B盒子绑定touchstart事件,给A盒子设置click事件.点击B盒子触发touchstart事件(使B盒子,overflow:hidden),同时也会触发A盒子的click事件.这个就是点击穿透.(主要是click事件不是立马 执行,而是有300ms的延迟)

代码如下(示例):

<body>
    <div id="b">B</div>
    <div id="a">A</div>
    <script>
        var b = document.getElementById("b")
        var a = document.getElementById("a")
        b.ontouchstart = function() {
                this.style.display = 'none'
                console.log("点击了B")
            }
         a.onclick = function() {
                console.log("点击了A")
            } 
    </script>
</body>

2.点击穿透的解决办法

第一种解决办法(直接都用touchstart,最简单!!!):

代码如下(示例):

//给下面的A盒子同样设置一个touchstart事件
a.ontouchstart = function() {
            console.log("点击了A")
  }
第二种解决办法(太麻烦):

代码如下(示例):

//需要提前引入tab.js资源包
 <script src="tap.js"></script>
    <script>
        // tap.js解决穿透的原理:在touchend和click之间
        // 添加一个自定义事件tap,暂时不要去监听click事件设置定时器
        // 超过click的滞后时间(300ms),再把click事件加上
        var b = $('#b')
        var a = $('#a')
        //长按事件
        b.on('longtap',function(){
            console.log("关闭b",b)
            console.log(this) //window
            b._node.style.display = "none"
        })
        a._node.onclick = function(){
            console.log("点击A")
        }
    </script>
第三种解决办法(太麻烦):

代码如下(示例):

 <script src="https://cdn.bootcdn.net/ajax/libs/fastclick/1.0.6/fastclick.js"></script>
    <script>
        window.addEventListener("load",function(){
            FastClick.attach(document.body) //把fastclick插件应用到当前页面上
        })
        // FastClick 把移动端的click事件延迟300ms取消掉了
        var a = document.getElementById("a")
        var b = document.getElementById("b")
        b.ontouchstart = function(){
            this.style.display = "none"
        }

        a.onclick = function(){
            console.log("点击A")
        }
    </script>

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满脑子技术的前端工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值