如何让touchmove之后不触发touchend的事件

Posted fly叶落丶知秋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让touchmove之后不触发touchend的事件相关的知识,希望对你有一定的参考价值。

手机扫码看效果

不多说,直接上代码

<ul id="Ul">
    <li>111</li>
    <li>222</li>
    <li>333</li>
    <li>444</li>
    <li>555</li>
    <li>666</li>
    <li>777</li>
    <li>888</li>
    <li>999</li>
    <li>000</li>
    <li>aaa</li>
    <li>bbb</li>
    <li>ccc</li>
    <li>ddd</li>
    <li>eee</li>
    <li>fff</li>
    <li>ggg</li>
    <li>hhh</li>
    <li>iii</li>
    <li>jjj</li>
    <li>kkk</li>
    <li>lll</li>
    <li>mmm</li>
    <li>nnn</li>
    <li>ooo</li>
    <li>ppp</li>
    <li>qqq</li>
</ul>
*{
    margin: 0;
    padding: 0;
    border: 0;
}
ul{
    list-style: none;
}
li{
    line-height: 2em;
    border-bottom: 1px solid #eee;
    width: 100%;
    text-indent: 2em;
}
var UL = document.getElementById(\'Ul\');
var moves = true;
function Alert(ev){
    if(moves)
    alert(ev.target.innerhtml)
}
UL.addEventListener(\'touchmove\',function(){
    moves = false;
    UL.addEventListener(\'touchend\',function(){
        moves = true;
    })
})
UL.addEventListener(\'touchend\', Alert)
原理:
1. 设置一个变量moved来标识是否有移动过,初始值为false;
2. 绑定touchend事件,将moved置为true;
3. 绑定touchmove事件,将moved置为false;
4. 在touchmove事件函数中继续绑定touchend事件,再将moved置为true

---恢复内容结束---

以上是关于如何让touchmove之后不触发touchend的事件的主要内容,如果未能解决你的问题,请参考以下文章

移动端不触发touchend的解决方法以及后续影响问题的处理

移动端事件(touchstart+touchmove+touchend)

移动端touchstartouchmovetouchend 事件如果页面有滚动时不让触发 touchend 事件。

2、react使用原生js模拟长按操作

如何修复移动浏览器上 touchend 事件不触发的bug

H5中的touch事件