zoukankan      html  css  js  c++  java
  • 小程序开发

    要实现双击的基本思路,就是通过touch来记录时间,然后通过最后一次点击时间减去touch的时间,如果时间小于300,就是双击时间,否则就是单击时间

    1.首先,需要在js中定义几个变量

      // 触摸开始时间
      touchStartTime: 0,
      // 触摸结束时间
      touchEndTime: 0,  
      // 最后一次单击事件点击发生时间
      lastTapTime: 0, 
      // 单击事件点击后要触发的函数
      lastTapTimeoutFunc: null, 

    2.触摸事件的函数

      /// 按钮触摸开始触发的事件
      touchStart: function(e) {
        this.touchStartTime = e.timeStamp
      },
     
      /// 按钮触摸结束触发的事件
      touchEnd: function(e) {
        this.touchEndTime = e.timeStamp
      },

    3.在界面中需要绑定点击事件的地方,需要加入bindtouchstart 和bindtouchend,以便记录下按钮开始触摸和结束触摸的时间。其他的分别绑定好单击、双击、长按事件就好了。

    <view class = "btn" bindtap="multipleTap" bindlongtap="longTap" bindtouchstart="touchStart" bindtouchend="touchEnd">
        单击/双击/长按
    </view>

    4.单击、双击和长按同时存在的实现:

      /// 长按
      longTap: function(e) {
        console.log("long tap")
        wx.showModal({
          title: '提示',
          content: '长按事件被触发',
          showCancel: false
        })
      },
     
      /// 单击、双击
      multipleTap: function(e) {
        var that = this
        // 控制点击事件在350ms内触发,加这层判断是为了防止长按时会触发点击事件
        if (that.touchEndTime - that.touchStartTime < 350) {
          // 当前点击的时间
          var currentTime = e.timeStamp
          var lastTapTime = that.lastTapTime
          // 更新最后一次点击时间
          that.lastTapTime = currentTime
          
          // 如果两次点击时间在300毫秒内,则认为是双击事件
          if (currentTime - lastTapTime < 300) {
            console.log("double tap")
            // 成功触发双击事件时,取消单击事件的执行
            clearTimeout(that.lastTapTimeoutFunc);
            wx.showModal({
              title: '提示',
              content: '双击事件被触发',
              showCancel: false
            })
          } else {
            // 单击事件延时300毫秒执行,这和最初的浏览器的点击300ms延时有点像。
            that.lastTapTimeoutFunc = setTimeout(function () {
              console.log("tap")
              wx.showModal({
                title: '提示',
                content: '单击事件被触发',
                showCancel: false
              })
            }, 300);
          }
        }
      },

    参考链接:https://blog.csdn.net/h330531987/article/details/80651139

  • 相关阅读:
    nyoj17单调递增最长子序列(dp)
    nyoj995硬币找零(dp完全背包)
    nyoj36最长公共子序列(dp)
    hdu2058 The sum problem(枚举~~等差数列求和公式)
    Oceanbase:ld升级导致的error adding symbols: DSO missing from command line
    c++基础
    笔试中常出现的虚函数问题
    背包问题-面试中的动态规划
    拼音魔法-华东师范大学程序设计竞赛-3256-EOJ
    滴滴新锐2017实习生面试经历
  • 原文地址:https://www.cnblogs.com/cap-rq/p/10303169.html
Copyright © 2011-2022 走看看