滑动页面时防止touch事件的误触问题

问题

在移动端页面进行优化时,一般使用touch事件替代鼠标相关事件,用的较多的是使用touchend事件替代PC端的click和mouseup事件。

但是,touchend事件在页面滚动时有个问题。在滚动完成后,如果当前触点的位置所指的元素绑定了touchend事件,这时便会触发该元素的touchend事件,造成误操作。

解决方法

解决方法就是在页面滚动时停止touchend事件冒泡,这样就可以防止触发touchend事件。

使用方法

引入该函数并进行调用。

function stopTouchendPropagationAfterScroll(){
    var locked = false;

    window.addEventListener(‘touchmove‘, function(ev){
        locked || (locked = true, window.addEventListener(‘touchend‘, stopTouchendPropagation, true));
    }, true);
    function stopTouchendPropagation(ev){
        ev.stopPropagation();
        window.removeEventListener(‘touchend‘, stopTouchendPropagation, true);
        locked = false;
    }
}

另外说明

在移动端,scroll事件是在滚动结束后才会触发一次,而touchmove事件是在滑动过程中多次触发,使用scroll会比使用touchmove在性能上有一定优化。但是,上面代码之所以不用scroll事件,而用touchmove事件,是为了同时适用于小于一个屏幕高度的页面,所以也是不得已使用touchmove。

原文地址:https://www.cnblogs.com/yuan619821/p/8404390.html

时间: 2024-08-05 01:21:04

滑动页面时防止touch事件的误触问题的相关文章

HTML在移动端页面设计是touch事件注意事项

HTML在移动端页面设计是touch事件注意事项 移动端touch事件 当用户手指放在移动设备在屏幕上滑动会触发的touch事件•touchstart——当手指触碰屏幕时候发生.不管当前有多少只手指•touchmove——当手指在屏幕上滑动时连续触发.通常我们再滑屏页面,会调用event的preventDefault()可以阻止默认情况的发生:阻止页面滚动•touchend——当手指离开屏幕时触发•touchcancel——系统停止跟踪触摸时候会触发.例如在触摸过程中突然页面alert()一个提

关于使用css3属性:transform固定菜单位置,在滑动页面时菜单闪现抖动的问题

1 myScroll = new IScroll('#h-s-wrapper', { 2 scrollX: true, 3 scrollY: true, 4 probeType: 3, 5 mouseWheel: true, 6 bounce: false, //锁定边界,不允许拖拽 7 //click: true 8 //preventDefault: false, 9 preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|S

解决小米系统下ViewPager、ScrollView内嵌套WebView时,Touch事件不响应的问题

前言:一直拿原生android4.4的Nexus5测试,结果装到老大的小米上,出了bug.安卓的兼容性问题真是....难以形容. Bug详细描述:本人用webview运行JS Goole地图,单独使用该webview时一切正常,而当放在scrollview和viewpager下,小米手机上便无法移动地图,其他手机是没问题的. 解决方案: 一.ScrollView内嵌套WebView 作为一个新手,我简单的检查了viewpager和scrollview的三个函数(dispatchTouchEven

进入网页开始计时,关闭页面时触发操作事件

<html> <head> <title>页面停留时间</title> </head> <body onload="init(); window.setTimeout('show_secs()',1);" > <script language="javascript"> var ap_name = navigator.appName; var ap_vinfo = navigator

IOS开发中滑动页面时NSTimer停止的问题

我们在做倒计时的时候,发现当你手指按着屏幕不放,拖动tableView滑动的时候,写在cell上得倒计时停止倒计时,松开继续倒计时.研究发现就是拖动tableView滑动时,NSTimer停止了. 这其实就是runloop的mode在做怪.runloop可以理解为cocoa下的一种消息循环机制,用来处理各种消息事件,我们在开发 的时候并不需要手动去创建一个runloop,因为框架为我们创建了一个默认的runloop,通过[NSRunloop currentRunloop]我们可以得到一个当前线程

H5案例分享:移动端滑屏 touch事件

移动端滑屏 touch事件 移动端触屏滑动的效果的效果在电子设备上已经被应用的越来越广泛,类似于PC端的图片轮播,但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart: //触摸屏幕时触发:即使已经有一个手指放在了屏幕上也会触发.touchmove: //在屏幕上滑动时连续的触发.在这个事件发生期间,调用preventDefault()可阻止滚动.touchend: //从屏幕上移开

【html5构建触屏网站】之touch事件

[html5构建触屏网站]之touch事件 前言 一个触屏网站到底和传统的pc端网站有什么区别呢,交互方式的改变首当其冲.例如我们常用的click事件,在触屏设备下是如此无力. 手机上的大部分交互都是通过touch来实现的,于是,对于触屏的交互式网站,触摸事件是相当重要的. Apple在iOS 2.0中引入了触摸事件API,Android正迎头赶上这一事实标准,缩小差距.最近一个W3C工作组正合力制定这一触摸事件规范. 规范 这里我们介绍几种普及得比较好的触摸事件,你可以在绝大多数现代浏览器中来

(一)html5 touch事件实现页面上下滑动

最近做的做那个app的项目由于用overflow:hidden导致了很多问题,于是决定研究下html5的touch事件.想找个全面点的帖子真是难死了,虽然好多关于html5 touch的文章但大多都是介绍touch事件或者很简短的小demo. 下午好生研究了下终于搞出了个比较全面的上下滑动的小demo,代码比较简单. 下面是完整代码,我把几个重要的地方做了红色标记 <!doctype html> <html lang="en"> <head> <

移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法

这两天自己在写一个手机网页,用到了触屏滑动的特效,就是往右滑动的时候左侧隐藏的菜单从左边划出来. 做完之后在手机原生浏览器中运行正常,但在QQ和微信中打开,发现touchmove只会触发一次,而且touchend也经常不触发. 之后百度了一下这个问题,原因是 主要是由于200ms超时导致内核不一定会一直处理touchmove事件,一旦超时会将后续所有的事件转交给UI处理,导致touchmove不会一直触发. 为了解决开发者需要,建议开发者在touchstart时调用event.preventDe