当前位置:首页 > uni-app

uniapp鼠标事件

2026-03-05 08:29:49uni-app

uniapp 鼠标事件处理

在 uniapp 中处理鼠标事件可以通过绑定事件监听器来实现,类似于传统网页开发中的事件处理方式。uniapp 支持常见的鼠标事件,如点击、长按、滑动等。

常用鼠标事件类型

  • @click:点击事件
  • @longpress:长按事件
  • @touchstart:触摸开始事件
  • @touchmove:触摸移动事件
  • @touchend:触摸结束事件
  • @mousedown:鼠标按下事件
  • @mouseup:鼠标抬起事件
  • @mousemove:鼠标移动事件

基本事件绑定

在模板中直接绑定事件处理函数:

<template>
  <view @click="handleClick" @longpress="handleLongPress">点击或长按我</view>
</template>

<script>
export default {
  methods: {
    handleClick() {
      console.log('点击事件触发');
    },
    handleLongPress() {
      console.log('长按事件触发');
    }
  }
}
</script>

事件对象参数

事件处理函数可以接收事件对象参数,包含事件相关信息:

<template>
  <view @click="handleClickWithEvent">点击获取事件信息</view>
</template>

<script>
export default {
  methods: {
    handleClickWithEvent(event) {
      console.log('事件类型:', event.type);
      console.log('触发元素:', event.target);
      console.log('坐标位置:', {
        x: event.touches[0].clientX,
        y: event.touches[0].clientY
      });
    }
  }
}
</script>

阻止事件冒泡

使用 .stop 修饰符阻止事件冒泡:

<template>
  <view @click="outerClick">
    外层
    <view @click.stop="innerClick">内层(不会触发外层点击)</view>
  </view>
</template>

事件修饰符

uniapp 支持多种事件修饰符:

  • .stop:阻止事件冒泡
  • .prevent:阻止默认行为
  • .capture:使用捕获模式
  • .self:只有当事件是从侦听器绑定的元素本身触发时才触发回调
  • .once:只触发一次回调
<view @click.once="handleOnceClick">只会触发一次的点击</view>

自定义组件事件

对于自定义组件,可以通过 $emit 触发事件:

<template>
  <custom-button @custom-click="handleCustomClick"></custom-button>
</template>

<script>
export default {
  methods: {
    handleCustomClick(data) {
      console.log('自定义事件触发:', data);
    }
  }
}
</script>

在自定义组件内部:

this.$emit('custom-click', { message: '来自子组件的数据' });

鼠标移动跟踪示例

实现一个跟随鼠标移动的元素:

uniapp鼠标事件

<template>
  <view 
    @mousemove="handleMouseMove"
    style="height: 500px; background: #eee; position: relative;"
  >
    <view 
      :style="{ 
        position: 'absolute',
        left: position.x + 'px',
        top: position.y + 'px',
        width: '50px',
        height: '50px',
        background: 'red'
      }"
    ></view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      position: { x: 0, y: 0 }
    };
  },
  methods: {
    handleMouseMove(event) {
      this.position = {
        x: event.clientX - 25,
        y: event.clientY - 25
      };
    }
  }
}
</script>

注意事项

  1. 在移动端,mousemove 等鼠标事件可能不会像在桌面浏览器中那样频繁触发
  2. 部分鼠标事件在移动设备上可能表现不同,建议同时考虑触摸事件
  3. 事件处理函数中避免执行耗时操作,以免影响性能
  4. 使用事件委托可以提高性能,特别是在处理大量相似元素的场景

标签: 鼠标事件
分享给朋友:

相关文章

vue实现长按事件

vue实现长按事件

实现长按事件的基本思路 在Vue中实现长按事件,可以通过监听mousedown和touchstart事件启动计时器,并在mouseup、mouseleave或touchend事件中清除计时器。如果计时…

vue 实现事件委托

vue 实现事件委托

Vue 中实现事件委托的方法 事件委托是一种通过将事件监听器绑定到父元素而非子元素的技术,利用事件冒泡机制统一处理子元素的事件。Vue 中可以通过以下方式实现: 1. 使用 v-on 和事件修饰符…

vue实现事件捕获

vue实现事件捕获

Vue 中实现事件捕获的方法 在 Vue 中,默认情况下事件是通过冒泡机制传递的。如果需要实现事件捕获,可以通过以下方式: 使用 .capture 修饰符 Vue 提供了 .capture 事件修饰…

vue中实现长按事件

vue中实现长按事件

监听原生事件实现长按 在Vue中可以通过@mousedown和@touchstart绑定原生事件,配合setTimeout触发长按逻辑。清除定时器使用@mouseup、@mouseleave和@tou…

vue实现鼠标双击事件

vue实现鼠标双击事件

Vue 实现鼠标双击事件的方法 在 Vue 中实现鼠标双击事件可以通过多种方式完成,以下是常见的几种方法: 使用 @dblclick 指令 Vue 提供了 @dblclick 指令,可以直接…

vue中实现点击事件

vue中实现点击事件

在 Vue 中实现点击事件的方法 使用 v-on 指令绑定点击事件 Vue 提供了 v-on 指令用于监听 DOM 事件。可以通过 v-on:click 或简写为 @click 来绑定点击事件。 &…