首页 > 其他分享 >事件处理

事件处理

时间:2023-03-15 23:12:17浏览次数:40  
标签:事件处理 Vue methods 触发 修饰符 vm 事件

事件的基本使用

  1. 使用v-on:xxx或者@xxx绑定事件,其中xxx是事件名
  2. 事件的回调需要配置在methods对象中,最终会在vm里面
  3. methods中配置的函数,不要用箭头函数 ,否则使用this指的不是vm
  4. methods中配置的函数,都是被Vue所管理的函数,this指向的是vm组件实例对象
  5. @click="demo"@click="demo($event)" 效果一样,但后者可以传参,例如@click="demo($event, 66)", 这里指传入数字66

事件修饰符

Vue中的事件修饰符

  1. prevent:阻止默认事件(常用)
<a href="https://www.baidu.com" @click.prevent="showInfo">点我</a>
//默认事件为跳转页面,这里阻止了页面跳转
  1. stop:阻止事件冒泡(常用)

  2. once:事件只触发一次(常用)

  3. capture:使用事件的捕获模式

  4. self:只有event.target是当前操作的元素时,才触发事件

  5. passive:事件的默认行为立即执行,无需等待事件回调执行完毕

    <div id="room">
        <h3>修饰符可以链式调用。 例如: @click.prevent.stop </h3>
		
		<!-- 这里阻止了a标签的默认跳转网页事件 -->
        <a href="https://www.baidu.com" @click.prevent="showInfo">点我</a>

        <div class="demo" @click="showInfo">
            <button @click.stop="showInfo">阻止事件冒泡</button>
        </div>

        <button @click.once="showInfo">只触发一次</button>

        <!-- 使用事件捕获模式 -->
        <!-- 事件有捕获阶段(从外往内)和冒泡阶段(从内往外) ,一般事件处理是在冒泡阶段,所以点击div2时,先打印2再打印1。可以用capture使事件处理在捕获阶段,这样就是先打印1再打印2-->
        <div class="box1" @click.capture="showMsg(1)">
            div1
            <div class="box2" @click="showMsg(2)">
                div2
            </div>
        </div>

        <!-- 只有event.target是当前操作的元素时才触发事件 -->
        <!-- 本来点击按钮会冒泡到div,从而触发两次点击事件,但是div加了self后,由于点击的是btn,所以event.target是btn而不是div,所以不会触发div的点击事件(阻止冒泡的另一种方式)-->
        <div class="demo" @click.self="showInfo">
            <button @click="showInfo">点我</button>
        </div>

        <!-- 事件的默认行为立即执行,无需等待时间回调执行完毕 -->

        <!-- 滚动事件分为:滚动条滚动scroll && 鼠标滚轮滚动wheel -->
        <!-- 滚动条滚动,一旦滚动到底,就不再触发滚动事件里的代码;先滚动条滚动再触发事件里的代码 -->
        <!-- 鼠标滚轮只要一直滚,滚动条到底了也可以继续执行滚动事件里的代码;先触发事件里的代码再滚动 -->
        <!-- 所以这里如果使用wheel就需要优化,使用passive,让代码立即执行,无需等待滚动条滚动 -->
        <div class="list" @wheel.passive="demo">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </div>
    </div>
    <script>
        // 创建Vue实例
        const vm = new Vue({
            el: '#room',
            data: {
                name: 'cloud'
            },
            methods: {
                showInfo(e) {
                    // e.preventDefault();// a的默认事件是跳转页面,这个方法可以阻止默认事件
                    //e.stopPropagation();//阻止事件冒泡
                    alert('你好')
                },
                showMsg(msg) {
                    console.log(msg)
                },
                demo() {
                    for(let i = 0; i < 10000; i++) {
                        console.log('$')
                    }
                    console.log('finish')
                }
            },
        })
    </script>

键盘事件

键盘上的每个按键都有自己的名称和编码,例如:Enter(13).Vue还对一些常用的按键起了别名便于使用

Vue中常用的按键别名

  1. enter:回车
  2. delete:删除(捕获delete键和<———键)
  3. esc:退出
  4. space:空格
  5. tab:换行,必须配合keydown使用
  6. up:上
  7. down:下
  8. left:左
  9. right:右

Vue未提供别名的按键

可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名)

<!-- 使用自定义键名 -->
 <input type="text" name="" id="" @keydown.huiche="showInfo">
 ...
 //声明自定义键名
 //Vue.config.keyCodes.自定义键名 = 键码
 Vue.config.keyCodes.huiche = 13

系统修饰符(特殊)

例如ctrl、alt、shift、meta(win键)等都是系统修饰符

  1. 配合keyup使用:按下修饰键的特殊,再按下其他键,随后释放其他键,事件才被触发
  2. 配合keydown使用:正常触发事件
<div id="room">
        <h1>
            Hello, {{name}}
        </h1>
        <h3>keyup:按下后松手才触发</h3>
        <h3>keydown:按下后就触发</h3>
        <input type="text" placeholder="按下回车提示输入" @keyup="showInfo">


        <h3>自定义键名</h3>
        <input type="text" name="" id="" @keydown.huiche="showInfo">


        <h3>按下tab</h3>
        <!-- tab只适合跟keydown配合使用,因为tab一按下,焦点就会离开输入框,而事件的对象又是这个输入框,所以如果用up则无法触发事件</br> -->
        <input type="text" @keyup.tab="showInfo">


        <!-- 系统修饰键指定某个按键配合使用,例如ctrl+y才触发事件 -->
        <input type="text" name="" id="" @keyup.ctrl.y="showInfo">
    
</div>

 <script>
       //自定义键名
        Vue.config.keyCodes.huiche = 13
        
		const vm = new Vue({
            el: '#room',
            data: {
                name: 'cloud'
            },
            methods: {
                showInfo(e) {
                    // if (e.keyCode !== 97) return
                    console.log(e.keyCode)
                }
            }
        })
</script>

标签:事件处理,Vue,methods,触发,修饰符,vm,事件
From: https://www.cnblogs.com/cloud0-0/p/17219924.html

相关文章

  • Vue.js 事件处理-事件修饰符
    视频<!DOCTYPEhtml><html> <head> <metacharset="UTF-8"/> <title>事件修饰符</title> <!--引入Vue--> <scripttype="text/javascript"src="../js/vue.j......
  • Vue.js 事件处理-事件的基本使用v-on传参
    视频<!DOCTYPEhtml><html> <head> <metacharset="UTF-8"/> <title>事件的基本使用</title> <!--引入Vue--> <scripttype="text/javascript"src="../js/v......
  • 04、复杂事件处理(CEP)简介
    复合事件架构是由史丹佛大学的DavidLuckham与BrianFraseca所提出,使用模式比对、事件的相互关系、事件间的聚合关系,目的从事件云(eventcloud)中找出有意义的事件,使得IT架构......
  • 05、复杂事件处理(CEP)引擎简介
    目前已有的CEP引擎根据事件处理语言可以分为两大类:面向流和面向规则的CEP引擎。面向流的CEP引擎有MicrosoftStreamlnsight、OracleCEP、IBMSPADE、Esper等。而面向规则......
  • 事件处理
    监听事件#我们可以使用 v-on 指令(简写为 @)来监听DOM事件,并在事件触发时执行对应的JavaScript。用法:v-on:click="methodName" 或 @click="handler"。事件处理......
  • 事件处理
     1.鼠标事件例子:(move方法是为了移动窗口)默认情况下,只有在按下鼠标按钮(不释放)时移动鼠标,才会产生鼠标移动事件,否则不会产生鼠标移动事件。event->x()是相对于窗......
  • [11] 事件处理机制
    Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:文件事件(FileEvent):Redis服务器通过套接字与客户端(或其他Redis服务器)进行连接,而文件事件就是服务器对套接......
  • 事件处理系统--token
    技术:vue2+node.js一、token​ Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的......
  • Odoo 自定义form表单按钮点击事件处理程序
    实践环境Odoo14.0-20221212(CommunityEdition)代码实现方案1通过研究发现,点击odooform表单按钮时,会调用odoo14\odoo\addons\web\static\src\js\views\form\form_co......
  • 【Java AWT 图形界面编程】事件处理机制 ③ ( AWT 中常见的事件和事件监听器 | 低级事
    文章目录​​一、AWT中常见的事件​​​​1、低级事件​​​​2、高级事件​​​​二、AWT中常见的事件监听器​​一、AWT中常见的事件AWT中事件分为两大类,低级事件......