首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    移动端click延迟及zepto的穿透现象 转

    当你点击移动设备的屏幕时, 可以分解成多个事件,顺序依次为:touchstart — touchmove — touchend — click, 这些事件是按顺序依次触发的....解决延迟的思路: touchstart touchend是没有延迟的,可以在touchend时触发用户想要在click时触发的事件. zepto 解决click延迟的原理: 自定义tap事件,当用户点击元素时...,touchend事件先发生, 当touchend事件冒泡到document时触发目标元素绑定的tap事件 简单模拟zepto tap的实现方式(这里忽略touchstart与touchend的点击位置的判断...): // document元素上绑定touchend事件, 在touchend的事件处理函数中自定义tap事件, 当点击的目标元素的touchend事件冒泡到document上时, 触发绑定在目标元素上的...因为zepto的tap事件统一是在document的touchend时触发的,若在这里使用e.preventDefault(),那页面上所有元素在touchend后触发的事件都不会被执行了。

    1.3K10

    移动端web开发,click touch tap区别

    三:穿透原因 问题:在HTML5点击了q以后,弹出b的弹框 因为tap事件是通过document绑定了touchstart和touchend事件实现,$('.q')上,当touchend事件冒泡到document...上以后执行$(this).hide();此时$('.b'),就处在了页面的最前面 现在touchend冒泡到了document上,并且$('.b')在页面的最前面,然后就触发了click事件 四:解决穿透问题...2.为元素绑定touchend事件,并在内部加上e.preventDefault(); $demo.on('touchend',function(e){ //改变了事件名称,tap是body上才被触发,...现金大多数触屏手机webkit内核提供了touch事件的监听 包含:touchstart touchmove touchend touchcancel四个事件 touchstart touchmove...touchend事件可以类比于mousedown mouseover mouseup的触发

    2.3K100

    【425】在页面对象中启用模板方法模式(Template Method Pattern)

    得益于js的不严谨性,我们在Page中以一种不一样的返回值,重写了touchMove、touchEnd这两个方法,使其由不返回,改为返回布尔值。稍后我们在子类中会看到这个重写的作用。...(e) { if (super.touchEnd(e)){ this.audioManager.touchEnd(e) } } ... } module.exports...= IndexPage 我们看到,在IndexPage类的touchMove和touchEnd方法中,我们通过调用父类中的模板方法touchMove或touchEnd,获知了当前事件是否需要处理。...(e) { if (super.touchEnd(e)){ // 处理游戏结束单击屏幕的逻辑 this.audioManager.playHitAudio()...touchMove和touchEnd方法,不是Page类定义的,但它们也可以算作模板方法的一部分,并且充分体现了模板方法作为模板的意义,而不仅仅是作为一个父类中被重写的方法符号。

    83310

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

    做完之后在手机原生浏览器中运行正常,但在QQ和微信中打开,发现touchmove只会触发一次,而且touchend也经常不触发。...之后继续百度,得知当在移动端上点击屏幕时,会依次触发touchstart,touchmove,touchend,click事件。...之后测试了一下,发现正确的触发过程应该是:touchstart→touchmove→touchend或者touchstart→touchend→click。...之后我大胆推测了一下: 会不会是因为在移动端click事件的触发条件就是必须touchstart和touchend同时触发才能触发click呢?...我在touchstart中调用了event.preventDefault方法,是不是让浏览器误以为没有触发touchstart事件,只触发了touchend事件,所以没有触发click事件呢?

    3.3K20

    移动端前端常见的触摸相关事件touch、tap、swipe等整理

    click事件 单击事件,类似于PC端的click,但在移动端中,连续click的触发有200ms ~ 300ms的延迟 2. touch类事件 触摸事件,有touchstart touchmove touchend...touchcancel 四种之分 touchstart:手指触摸到屏幕会触发 touchmove:当手指在屏幕上移动时,会触发 touchend:当手指离开屏幕时,会触发 touchcancel:可由系统进行的触发...ev : ev.type); 11 }); 12 }); 13 } 14 15 addEvent(one, 'tap click touchstart touchmove touchend...2) 查看触发的事件对象 简单地修改,将事件监听中第三个参数置为true,输出完整的事件对象 addEvent(one, 'tap click touchstart touchmove touchend...8、触发touchstart(多根手指在屏幕上,提起一根,会刷新一次全局 touch,重新触发第一根手指的touchstart) 9、提起第一根手指,触发touchend 还有其他事件有待发觉...

    2.2K20

    移动端touch拖动事件和click事件冲突问题解决

    移动端使用 touch事件类型: touchstart当用户在触摸平面上放置了一个触点时触发 (手指放到屏幕上) touchmove当用户在触摸平面上移动触点时触发 (手指在屏幕上滑动) touchend...结合计算触摸时长和触摸元素起始位置两种方式,逻辑比较复杂 下面看我是怎么做的: 首先应该了解触摸行为的事件响应机制: 如果有拖动行为,事件执行次序为:touchstart-> touchmove-> touchend...没有拖动行为,事件执行次序为:touchstart-> touchend 从上面的分析来看,我们可以从touchmove 入手,继续往下看 解决 在touchmove事件中增加一个是否移动过的标记...isMoved: true 在touchend事件中判断isMoved是否为true,是true则按原有逻辑执行,是false则说明没有移动过,属于点击行为 在touchend事件最后,重置

    2.3K20
    领券