当前位置:首页 > VUE

vue实现长按

2026-03-27 15:10:17VUE

Vue 实现长按功能的方法

在 Vue 中实现长按功能可以通过监听 mousedowntouchstart 事件来开始计时,并在达到指定时间后触发长按事件。以下是几种实现方式:

使用自定义指令

自定义指令可以封装长按逻辑,方便在多个组件中复用。

Vue.directive('longpress', {
  bind: function (el, binding, vNode) {
    let pressTimer = null
    const handler = binding.value

    const start = (e) => {
      if (pressTimer === null) {
        pressTimer = setTimeout(() => {
          handler()
        }, 1000) // 1秒长按
      }
    }

    const cancel = () => {
      if (pressTimer !== null) {
        clearTimeout(pressTimer)
        pressTimer = null
      }
    }

    el.addEventListener('mousedown', start)
    el.addEventListener('touchstart', start)
    el.addEventListener('mouseup', cancel)
    el.addEventListener('mouseleave', cancel)
    el.addEventListener('touchend', cancel)
    el.addEventListener('touchcancel', cancel)
  }
})

使用方式:

vue实现长按

<button v-longpress="longPressHandler">长按我</button>

使用组件方法

在组件内部直接实现长按逻辑。

export default {
  methods: {
    startPress(e) {
      this.pressTimer = setTimeout(() => {
        this.longPressHandler()
      }, 1000)
    },
    endPress() {
      clearTimeout(this.pressTimer)
    },
    longPressHandler() {
      console.log('长按事件触发')
    }
  }
}

模板部分:

vue实现长按

<button 
  @mousedown="startPress"
  @touchstart="startPress"
  @mouseup="endPress"
  @touchend="endPress"
>长按我</button>

使用第三方库

可以使用 vue-touchhammer.js 等库来简化长按功能的实现。

安装 hammer.js

npm install hammerjs

使用示例:

import Hammer from 'hammerjs'

export default {
  mounted() {
    const hammer = new Hammer(this.$el)
    hammer.on('press', () => {
      console.log('长按事件触发')
    })
  }
}

注意事项

  • 移动端需要同时处理 touchstarttouchend 事件。
  • 长按时间可以根据需求调整,通常设置为 500ms 到 1s。
  • 清除定时器时要确保所有可能取消长按的事件都被处理。

以上方法可以根据项目需求选择适合的实现方式。自定义指令适合全局复用,组件方法适合局部使用,第三方库则提供了更丰富的手势支持。

标签: vue
分享给朋友:

相关文章

vue 实现闪烁

vue 实现闪烁

Vue 实现闪烁效果的方法 方法一:使用 CSS 动画 在 Vue 组件中定义一个闪烁的 CSS 动画,通过绑定 class 或 style 来控制元素的闪烁效果。 <template>…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue实现翻译

vue实现翻译

Vue 实现翻译功能的方法 使用 i18n 插件实现多语言切换 安装 vue-i18n 插件: npm install vue-i18n 创建语言资源文件(如 en.json 和 zh.json):…

vue el 实现

vue el 实现

Vue 中使用 Element UI (el) 的实现方法 Element UI 是一个基于 Vue 的组件库,提供丰富的 UI 组件,常用于快速构建企业级中后台产品。以下介绍 Vue 项目中集成和使…

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <v…

vue toast实现

vue toast实现

Vue Toast 实现方法 使用第三方库(推荐) 安装 vue-toastification 库,这是一个功能丰富且轻量级的 Vue Toast 插件。 npm install vue-toast…