Vue.directive('longpress', {
    bind: function (el, binding, vNode) {
      if (typeof binding.value !== 'function') {
        const compName = vNode.context.name
        let warn = `[longpress:] provided expression '${binding.expression}' is not a function, but has to be`
        if (compName) { warn += `Found in component '${compName}' ` }
        console.warn(warn)
      }
      let pressTimer = null
      let isLongTouch = false
      let start = (e) => {
        e.stopPropagation()
        e.preventDefault()
        isLongTouch = false
        if (pressTimer === null) {
          pressTimer = setTimeout(() => {
            isLongTouch = true
          }, 200)
        }
      }
      // Cancel Timeout
      let cancel = (e) => {
        // Check if timer has a value or not
        if (pressTimer !== null) {
          clearTimeout(pressTimer)
          pressTimer = null
        }
        binding.value(e, isLongTouch)
      }
      // Run Function
      // const handler = (e) => {
      //   binding.value(e, true)
      // }
      // Add Event listeners
      el.addEventListener('mousedown', start, true)
      el.addEventListener('mouseup', cancel, true)
      el.addEventListener('touchstart', start, true)
      el.addEventListener('touchend', cancel, true)
      el.addEventListener('touchcancel', cancel, true)
      el.addEventListener('click', function (e) {
        e.stopPropagation()
        e.preventDefault()
      })
    }
  })
vue长按指令
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
 平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1.在src目录下 新建文件夹utils文件夹,然后新建derective.js,复制上方代码,粘贴到derect...
- line-clamp打包发布后无效问题 今天客户提出项目中页面的超出行数隐藏的功能需求,发现之前已经写过的效果在真...