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 相关文章推荐
屏蔽script注入小例子
Nov 12 Javascript
JavaScript html5 canvas绘制时钟效果(二)
Mar 27 Javascript
浅析创建javascript对象的方法
May 13 Javascript
简单实现js悬浮导航效果
Feb 05 Javascript
js Canvas绘制圆形时钟效果
Feb 17 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
Aug 17 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
Aug 22 Javascript
jQuery表单选择器用法详解
Aug 22 jQuery
vue实现商品列表的添加删除实例讲解
May 14 Javascript
v-slot和slot、slot-scope之间相互替换实例
Sep 04 Javascript
原生小程序封装跑马灯效果
Oct 21 Javascript
在react-antd中弹出层form内容传递给父组件的操作
Oct 24 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
YB217、YB235、YB400浅听
2021/03/02 无线电
如何隐藏你的.php文件
2007/01/04 PHP
phpmail类发送邮件函数代码
2012/02/20 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
python切换hosts文件代码示例
2013/12/31 Python
python实现进程间通信简单实例
2014/07/23 Python
python实现按任意键继续执行程序
2016/12/30 Python
Python 含参构造函数实例详解
2017/05/25 Python
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
python中对数据进行各种排序的方法
2019/07/02 Python
pytorch中的embedding词向量的使用方法
2019/08/18 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
优秀企业获奖感言
2014/02/01 职场文书
电气个人求职信范文
2014/02/04 职场文书
代领毕业证委托书
2014/08/02 职场文书
工作检讨书怎么写
2014/10/10 职场文书
销售经理岗位职责
2015/01/31 职场文书
仓库管理制度范本
2015/08/04 职场文书
《搭石》教学反思
2016/02/18 职场文书