事件绑定
- 我们需要给一个标签绑定事件 就需要借助一个指令 叫 v-on
- 绑定事件的方式
- 第一种方式 事件中可以直接写代码html
<button v-on:click="count++">累加</button>
- 第二种方式 在执行方法 方法名后面可以不用加小括号
- 没有加小括号也可以获取到事件对象
- 在函数中 this 指向 vm
- methods 中的 函数一般情况下不要写为箭头函数 因为这样将无法获取到 vm 实例对象
- 写法:html
<button v-on:click="changeCount">累加</button>
- 第三种方式 使用小括号的方式没有事件对象 e
- 这种方式下需要使用 $event 传递事件对象 e
- 如果有多个数据需要传递的时候 这种方式就是最佳的方式
- 写法:html
<button v-on:click="changeCount($event, 40)">累加</button>
- 第四种方式 简写形式 @ 就是 v-on 的缩写形式 @ 后面不需要加 ":" 指令后面加事件名称就可以绑定事件html
<button @click="changeCount($event, 40)">累加</button>
- 第五种 多事件处理 多事件调用时必须加括号html
<button @click="changeCount($event, 40), two($event)">多事件处理</button>
- 第一种方式 事件中可以直接写代码
事件修饰符
- .stop
- 解释:阻止事件的传播
- 例子:html
<div @click="clickDiv($event, 'box')" class="box"> <!-- 事件修饰符 事件后面打点调用修饰符就可以了 --> <div @click.stop="clickDiv($event, 'item')" class="item"></div> </div>
- .prevent
- 解释:阻止默认事件
- 例子:html
<form action="" method="get"> <!-- 不想提交表单 阻止默认事件 --> <input @click.prevent="submit" type="submit" /> </form>
- .capture
- 解释:使用事件的捕获模式
- 例子:html
<div @click.capture="clickDiv($event, 'box')" class="box"> <!-- 事件修饰符 事件后面打点调用修饰符就可以了 --> <div @click.capture="clickDiv($event, 'item')" class="item"></div> </div> <!-- 阻止事件传播 事件修饰符可以连续调用--> <!-- .capture 事件捕获阻止--> <div @click.capture.stop="clickDiv($event, 'box')" class="box"> <!-- 事件修饰符 事件后面打点调用修饰符就可以了 --> <div @click.capture="clickDiv($event, 'item')" class="item"></div> </div>
- .self
- 解释:触发事件的元素是自身的时候才会触发事件 (e.target 和自身标签元素一致的时候才会触发)
- 例子:html
<div @click.self="clickDiv($event, 'box')" class="box"> <!-- 事件修饰符 事件后面打点调用修饰符就可以了 --> <div @click="clickDiv($event, 'item1')" class="item1"> <div @click="clickDiv($event, 'item')" class="item"></div> </div> </div>
- .once
- 解释:指定事件只能触发一次
- 例子:html
<button @click.once="once">我只能点一次</button>
- .passive
- 解释:滚动事件的默认行为 (即滚动行为) 将会立即触发
- 实例:html
<div class="scroll" @scroll.passive="scroll" style=" overflow-y: scroll; width: 200px; height: 300px; border: 1px solid black; " > <div class="content" style="width: 100px; height: 3000px; background-color: red" ></div> </div>
键盘事件
- Vue 为最常用的键提供了别名: 指定按下键盘中的某个键触发事件
- .enter 按 enter 回车 键执行响应的事件html
<input type="button" @keyup.enter="keyup" value="enter" />
- .tab 按 tab 键执行响应的事件html
<!-- .tab 用于切换聚焦点 使用tab 切换到指定 标签元素才会触发事件 --> <input type="button" @keyup.tab="keyup" value="tab" />
- .delete (捕获“删除”和“退格”键)html
<input type="button" @keyup.delete="keyup" value="delete" />
- .esc 按 esc 键执行响应的事件html
<input type="button" @keyup.esc="keyup" value="esc" />
- .space 按空格 键执行响应的事件html
<input type="button" @keyup.space="keyup" value="space" />
- .up .down .left .right 上下左右四个方向键html
<input type="button" @keyup.up="keyup" value="up" />
- .enter 按 enter 回车 键执行响应的事件
- 其他键的使用
- 你可以直接将 KeyboardEvent.key 暴露的任意有效按键名转换为 kebab-case 来作为修饰符。
- home 键html
<input type="button" @keyup.home="keyup" value="home" />
- page-downhtml
<input type="button" @keyup.page-down="keyup" value="page-down" />
- 键盘 abcd 键使用html
<input type="button" @keyup.a="keyup" value="a" />
- home 键
- 对于某些标点符号键,可以直接把它们包含进去,
- ","html
<input type="button" @keyup.,="keyup" value="," />
- ","
- 语法的限制导致某些特定字符无法被匹配,比如 "、'、/、=、> 和 .。对于这些字符,你应该在监听器内使用 event.key 代替。html
<input type="button" @keyup.,="keyup" value="." />
jsvar option = { data() { return {} }, methods: { // keyup(e) { // console.log(e.key) // console.log('键盘按下了') // }, keyup(e) { // console.log(e.key) if (e.key == '.') { console.log(e) console.log('键盘按下了') } } } } var vm = Vue.createApp(option).mount('#app')
- 你可以直接将 KeyboardEvent.key 暴露的任意有效按键名转换为 kebab-case 来作为修饰符。
系统修饰符 与 鼠标修饰符
只有在按下这些键的时候才能触发事件
ctrl
- 表示你按下 ctrl 并按下 a 的时候才生效
- 只要你按下 ctrl 键 无论中间按下什么键 最后只要是 a 都可触发事件
- 写法:html
<input type="button" value="ctrl" @keyup.ctrl.a="keyup" />
.alt
html<input type="button" value="alt" @click.alt="keyup" />
.shift
html<input type="button" value="shift" @click.shift="keyup" />
.meta
html<input type="button" value="meta" @keyup.meta.enter="keyup" />
.exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。
html<!-- .exact 只能按下 系统修饰符这一个键才能触发事件 不能多按其他的系统的修饰符 --> <input type="button" value="ctrl" @click.ctrl.exact="keyup" /> <input type="button" value="ctrl" @keyup.ctrl.c.exact="keyup" />
鼠标修饰符
- .left 按下鼠标左键触发事件
- .right 按下鼠标右键触发事件
- .middle 按下鼠标中间的键触发事件
- 例子:html
<input type="button" value="middle" @click.middle="keyup" />