移动端点击那些事

作者: 光哥很霸气 | 来源:发表于2016-11-22 21:37 被阅读302次

简介

这篇文章主要是一些总结的移动端开发的一些坑,以及爬坑方法。

正文

ios-webview点击事件(click)延迟

在pc端开发时常用的点击事件中使用最对的可能是click,但是在移动端的网页中,默认是拥有双击缩放这个功能的,那么为了使这个功能生效,页面通常是在第一次点击完之后先不触发click事件,而是等待300ms之后看是否有第二次点击,有的话就缩放,没有就触发点击事件,这就造成了300ms延迟。
幸运的是谷歌浏览器将在包含 width=device-width 或者置为比 viewport 值更小的页面上禁用双击缩放。当然,没有双击缩放就没有 300 毫秒点击延迟。随后各大浏览器也相应支持,也包括ios的safari。但是兼容性不是很好,例如ios的webview仍然有300ms的延迟,原因未知,等我研究完ios开发再来回答。

解决方法:

touchTap

但此时又会出现一个新的问题,tap事件穿透。

tap事件的原理是监听body上的touchstart,touchmove以及touchend来进行判断,那么正常情况下tap事件还没有冒泡到body时,click事件就触发了。但是当页面有300ms延迟是,就会造成事件穿透。当然解决有两个办法,最简单也是副作用最大的办法是将页面所有click事件全部切换成touchTap事件,第二个就是使用fastclick。

fastclick

打开fastclick源码可以看到有一个sendClick方法。

/**
     * Send a click event to the specified element.
     *
     * @param {EventTarget|Element} targetElement
     * @param {Event} event
     */
    FastClick.prototype.sendClick = function(targetElement, event) {
        var clickEvent, touch;

        // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)
        if (document.activeElement && document.activeElement !== targetElement) {
            document.activeElement.blur();
        }

        touch = event.changedTouches[0];

        // Synthesise a click event, with an extra attribute so it can be tracked
        clickEvent = document.createEvent('MouseEvents');
        clickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
        clickEvent.forwardedTouchEvent = true;
        targetElement.dispatchEvent(clickEvent);
    };

可以看出这里是用document的createEventAPI模拟了一次点击事件。紧接着我们在FastClick.prototype.onTouchEnd这个方法下面发现这里调用了this.sendClick方法,由此可以看出fastclick的原理就是在touchEnd事件中增加判断,看是否是一次移动端的点击事件,如果是,就主动出发click,这样既解决了移动端300ms延迟,又解决了事件穿透,是一个比较好的解决方案。

相关文章

  • 移动端 300 毫秒延迟,怎么解决 ?

    移动端 300 毫秒延迟,怎么解决? 移动端 300 毫秒延迟,指的是当没有经过特殊处理,移动端浏览器在派发点击事...

  • 移动端点击那些事

    简介 这篇文章主要是一些总结的移动端开发的一些坑,以及爬坑方法。 正文 ios-webview点击事件(click...

  • vue资源

    1、移动端 1.1、fastclick(消除移动端300ms延迟)fastclick 消除移动端300ms的点击延...

  • 点击穿透

    点击穿透 ** 点击穿透 是移动端web问题。**** 始于移动端较pc上的特殊功能:双击( double ta...

  • 移动端的那些事(一)

    移动端纯纯纯纯小白一个,单纯做下记录。 常用meta标签 input,button 在ios上会有圆角 a,inp...

  • 前端开发遇到的问题合集

    解决:hover 伪类在移动端二次点击的问题 用 css 写出的 hover 效果,在移动端,需要点击触发,但是在...

  • fastclick用法

    移动端点击延迟事件 移动端浏览器在派发点击事件的时候,通常会出现300ms左右的延迟。原因: 移动端的双击会缩放导...

  • 微网站—上拉、下拉刷新(重新请求数据)

    PC端的分页和移动端的分页是不一样的,如果移动端像PC端那样点击上一页、下一页,或者点击具体的页码,那样用户体验是...

  • fastclick的介绍和使用

    移动端点击延迟事件 1.移动端浏览器在派发点击事件的时候,通常会出现300ms左右的延迟 2.原因: 移动端的双击...

  • 联机共读11期-1.8-汤健彬

    笔记摘录部分:本章重点介绍的是移动端广告投放的流量转化。 移动端完整的链条:广告展示——点击购买——移动支付。这条...

网友评论

    本文标题:移动端点击那些事

    本文链接:https://www.haomeiwen.com/subject/jhuppttx.html