vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作


Posted in Javascript onJuly 27, 2020

Vue 事件处理方法

可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。

v-on:click 单击事件

<button class=" btn btn-info" v-on:click="add(1)"> + + </button>

<button class=" btn btn-danger " v-on:click="subtract(1)"> - - </button>

v-on:dblclick 双击事件

<!-- 缩写语法 -->
<button class=" btn btn-info" @dblclick="add(5)"> + + </button>
<button class=" btn btn-danger " @dblclick="subtract(5)"> - - </button>

v-on:mousemove\mouseout 鼠标事件

<div class="canvas" @mouseout ="update">
  {{ x }} - {{ y }}
</div>
new Vue({
el:".vue-app",
 data:{
  age: 25,
 x:0,
 y:0
 },
 methods:{
 add:function(inc){
  this.age += inc;
 },
 subtract:function(dec){
  this.age -= dec ;
 },
 update:function(event){
 // console.log(event);
  this.x = event.offsetX;
  this.y = event.offsetY;
 }
 }
});

然而许多事件处理逻辑会更为复杂,所以直接把 JavaScript 代码写在 v-on 指令中是不可行的。因此 v-on 还可以接收一个需要调用的方法名称。

Vue.js 事件修饰符

在事件处理程序中尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。

为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。

.stop

.prevent

.capture

.self

.once

.passive

<!-- 阻止事件继续传播 -->
<p v-on:mousemove.stop> Stop </p>
 
<!-- 点击事件将只会触发一次 -->
<button class=" btn btn-info" v-on:click.once="add(1)"> + + </button>
 
 <!--点击 A 链接弹出提示内容,不再重载页面 -->
<p><a v-on:click.prevent ="alert() " href="http://blog.023xs.cn" rel="external nofollow" >blog.023xs.cn</a></p>

注意事项:使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。

Vue 按键修饰符

在监听键盘事件时,我们经常需要检查常见的键值。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:

<!-- 用户输入内容时,按下Enter 键才会触发事件 -->
<input v-on:keyup.enter="Email" type="text" class="form-control" placeholder="Email">
 
<!-- 用户输入内容时,按下删除”或“退格”键 键才会触发事件 -->
<input v-on:keyup.delete="Email" type="text" class="form-control" placeholder="Email">

全部的按键别名:

.enter

.tab

.delete (捕获“删除”和“退格”键)

.esc

.space

.up

.down

.left

.right

记住所有的 keyCode 比较困难,所以 Vue 为最常用的按键提供了别名,当然也可以通过全局 config.keyCodes 对象自定义按键修饰符别名。

补充知识:vue给同一元素绑定单击click和双击事件dblclick,执行不同逻辑

在做项目过程中,需求是点击孔位单击弹出对话框查看产品总数,双击弹出对话框查看详情。一开始直接click和dblclick写在标签里面,但是不管怎么样,总是执行单击事件

解决办法:利用计时器,在大概时间模拟双击事件

html部分代码:

<div class="grid-content">
 <el-button 

v-for="(item,index) in items" :key="index" 

 @click="storageCount(item.id)" 

 @dblclick.native="storageDetail(item.id)" 

  class="inline-cell" 

 :class="colors[item.status]">
   {{item.id}}</el-button>
 </div>

.native主要用于监听组件根元素的原生事件,主要是给自定义的组件添加原生事件。

官方对.native修饰符的解释为:有时候,你可能想在某个组件的根元素上监听一个原生事件。可以使用 v-on 的修饰符 .native

js部分代码

<script>
import desDialog from './dialog';
import detailDialog from './detailDialog';
var time = null; // 在这里定义time 为null 
export default {
 name: 'storeTable',
 components: {
 desDialog,
 detailDialog
 },
 props: ['providerid'],
 data() {
 return {
  colors: ['space', 'isBuy'],
  showDialog: false,
  showDialogT: false
 };
 },
 methods: {
// 单击事件函数
 storageCount(id) {
  clearTimeout(time); //首先清除计时器
  time = setTimeout(() => {
  this.showDialog = !this.showDialog; 
  const obj = {};
  obj.cutname = id;
  obj.providerid = this.providerid;
  this.$store.dispatch('GetStorageCount', obj);
  }, 300); //大概时间300ms
 },

// 双击事件函数,清除计时器,直接处理逻辑
 storageDetail(id) {
  clearTimeout(time); //清除
  this.showDialogT = !this.showDialogT;
  const obj = {};
  obj.cutname = id;
  obj.providerid = this.providerid;
  this.$store.dispatch('GetStorageDetail', obj);
 },
 close() {
  this.showDialog = false;
 },
 closeT() {
  this.showDialogT = false;
 }
 }
};
</script>

以上这篇vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
如何使用JS获取IE上传文件路径(IE7,8)
Jul 08 Javascript
javascript scrollTop正解使用方法
Nov 14 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
Nov 02 Javascript
js事件监听器用法实例详解
Jun 01 Javascript
JavaScript严格模式详解
Nov 18 Javascript
Javascript实现检测客户端类型代码封包
Dec 03 Javascript
jQuery中slidedown与slideup方法用法示例
Sep 16 Javascript
JavaScript排序算法动画演示效果的实现方法
Oct 18 Javascript
Bootstrap CSS布局之表格
Dec 17 Javascript
vue组件间通信解析
Mar 01 Javascript
bootstrap table 多选框分页保留示例代码
Mar 08 Javascript
BackBone及其实例探究_动力节点Java学院整理
Jul 14 Javascript
vue键盘事件点击事件加native操作
Jul 27 #Javascript
Element Cascader 级联选择器的使用示例
Jul 27 #Javascript
vue 通过绑定事件获取当前行的id操作
Jul 27 #Javascript
Element Rate 评分的使用方法
Jul 27 #Javascript
Element InputNumber计数器的使用方法
Jul 27 #Javascript
基于Vue中的父子传值问题解决
Jul 27 #Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
Jul 27 #Javascript
You might like
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
PHP读取Excel类文件
2017/05/15 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
Python 如何创建一个线程池
2020/07/28 Python
师范学院教师自荐书
2014/01/31 职场文书
楼面经理岗位职责范本
2014/02/18 职场文书
养牛场项目建议书
2014/05/13 职场文书
老公给老婆的检讨书(精华篇)
2014/10/18 职场文书
投标承诺函范文
2015/01/21 职场文书
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers
Python如何使用循环结构和分支结构
2022/04/13 Python
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL