javascript - zepto的touch模块中,为什么tap事件要通过settimeout(fn,0)触发?
ringa_lee
ringa_lee 2017-04-10 16:20:59
[JavaScript讨论组]

最近看touch.js源码。发现

tapTimeout = setTimeout(function() {
              // trigger universal 'tap' with the option to cancelTouch()
              // (cancelTouch cancels processing of single vs double taps for faster 'tap' response)
              //直接触发tap事件。
              var event = $.Event('tap')
              event.cancelTouch = cancelAll
              //清空所有定时器以及 清空touch对象。
              touch.el.trigger(event)
              // trigger double tap immediately  立即触发双击事件。
              if (touch.isDoubleTap) {
                if (touch.el) touch.el.trigger('doubleTap')
                touch = {}
              }

              // trigger single tap after 250ms of inactivity
              else {
                touchTimeout = setTimeout(function(){
                  touchTimeout = null
                  if (touch.el) touch.el.trigger('singleTap')
                  touch = {}
                }, 250)
              }
            }, 0)
          }

想知道,tapTimeout存在的意义,是在主干进程中,提出此回调函数,方便其他条件判断是否取消此定时器?

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
黄舟

主要是因为tap这个事件不是浏览器原生支持的,浏览器原生支持的事件touchstart,touchmove,touchend根据这几个事件可以封装出很多事件,类似tap,tap触发的时间晚于touchstart,早于click,但是何时是tap事件触发的时机就是一个问题了,采用延时的方法,保证tap事件不被多次执行

高洛峰

保证后执行。类似于then的作用~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号