Vue入门学习(二)

一、事件处理

基本用法

  • 使用v-on:xxx或者@xxx绑定事件,xxx为事件名,例如click事件

  • 事件的回调需要配置在methods对象中,最后会在vm上

  • methods中配置的汉纳树,不要使用箭头函数,否则this就不是vm

  • methods中配置函数,都是呗Vue所管理的函数,this指向vm或哲组件实例对象

  • @click = "btn1"和@click = btn1($event)效果一样,但是后者可以传递参数

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>02-MVVM</title>
    <script src="./js/vue.js"></script>
</head>
<body>
    <div id="demo">
        <h1>hello,{{name}}</h1>
        <button v-on:click="but1">点我无参数</button>
        <p></p>
        <button @click="but1">点我无参数-简要写法</button>
        <p></p>
        <!-- 如果想传递event,可以使用$event -->
        <button @click="but2($event,name)">点我有参数</button>
    </div>

    <script type="text/javascript">
        let vm = new Vue({
            data() {
                return { name: 'hanzhe' }
            },
            methods: {
                // 不能使用箭头函数,此时的this不是vm实例了,往上找找到了windows
                // but1:(event)=>{
                //     console.log(event)
                //     // 使用箭头函数时,this==Window 
                //     console.log(this)
                // },
                but1(event) {
                    // PointerEvent = event
                    console.log(event)
                    // this =  vm 
                    console.log(this)
                    alert("你好同学");
                },
                but2(event, a) {
                    console.log(event)
                    alert(a);
                }
            }
        })
        vm.$mount("#demo")
    </script>
</body>
</html>

二、事件修饰符

  • prevent 阻止默认事件-常用

  • stop 阻止事件冒泡

  • once 事件只触发一次

  • capture 使用事件的捕获模式,加上后,子容器的事件先触发父容器事件

  • self 只有event.target是当前操作的元素时才触发事件,只有自己的事件才会触发,子容器的事件不会触发

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

@scroll滚动条的滚动

@wheel鼠标中键的滚动

修饰符可以连续写,比如可以这么用,@click.prevent.stop即阻止事件冒泡,也阻止事件的默认行为。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>02-MVVM</title>
    <script src="./js//vue.js"></script>

    <style>
        * {margin-top: 20px; }
        .demo1 {height: 50px;background-color: skyblue;}
        .box1 {padding: 5px;background-color: skyblue;}
        .list {width: 200px;height: 200px;background-color: skyblue;overflow: auto;}
        li {height: 100px;}
    </style>
</head>
<body>
    <div id="demo">
        <h1>hello,{{name}}</h1>

        <!-- 1:事件绑定 -->
        <button v-on:click="but1">点我无参数</button>
        <p></p>
        <button @click="but1">点我无参数-简要写法</button>

        <p></p>
        <!-- 如果想传递event,可以使用$event -->
        <button @click="but2($event,name)">点我有参数</button>
        <p> </p>
        <!-- 2:事件的修饰符 -->
        <!-- 2.1阻止默认事件发生 -->
        <!-- a标签的默认事件为href,点击click后,会在跳转超链接指向的地址 -->
        <!-- 可以使用 prevent阻止默认事件(常用)-->
        <a href="http://www.baidu.com" v-on:click.prevent = "but1">a标签超链接</a>
        <!-- 2.1:stop阻止事件冒泡,父子容器内有相同的事件 -->
        <div class="demo1" @click="but1">
            <button @click.stop="but1">阻止事件冒泡</button>
        </div>
        <p></p>
        <!-- 2.2 once事件只发生一次,进页面第一次会触发,后面就不会再出现 -->
        <button v-on:click.once="but1">事件只发生一次</button>

        <!-- 2.3:使用事件的捕获模式 -->
        <!-- 如果不加 capture 点击div2时,先触发的时div2,加上后先触发div1的事件,再触发div2的事件 -->
        <div class="box1" @click.capture = but1($event)>
            div1
            <div class="box2" @click="but2($event,name)">
                div2
            </div>
        </div>
        <!-- 2.4只有event.tartget是当千操作元素的时才出发事件 -->
        <!-- 不加self时,子容器的事件会触发父容器的事件 -->
        <div class="box1" @click.self="but1($event)">
            <button @click="but1($event)">点我</button>
        </div>
        <!-- 
            事件的默认行为立即执行,无需等待事件回调执行完毕
            @scroll是滚动条滚动,passsive没有影响
            @wheel是鼠标滚动,passive有影响 -->
        <ul @scroll="demo" class="list">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>
    </div>
    <script type="text/javascript">

        let vm = new Vue({
            data() {
                return { name: 'hanzhe' }
            },
            methods: {
                // 不能使用箭头函数,此时的this不是vm实例了,往上找找到了windows
                // but1:(event)=>{
                //     console.log(event)
                //     // 使用箭头函数时,this==Window 
                //     console.log(this)
                // },

                but1(event) {
                    // PointerEvent = event
                    console.log(event)
                    // this =  vm 
                    console.log(this)
                    alert("你好同学");
                },
                but2(event, a) {
                    console.log(event)
                    alert(a);
                },
                demo(){
                    for(let i=0;i<100000;i++){
                        console.log('#')
                    }
                    console.log('累坏了')
                }
            }
        })
        // 绑定元素
        vm.$mount("#demo")
    </script>
</body>

</html>

三、鼠标事件

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

常用的按键别名:

  • 回车 enter

  • 删除 delete捕获删除和退格键

  • 退出 esc

  • 空格 space

  • 换行 tab 特殊,必须配合keydown去使用,因为自带切换光标的功能

  • 上 up

  • 下 down

  • 左 left

  • 右 right

vue未提供的别名的按键,可以使用按键原始的key值去绑定,但注意要转换:多单词小写,短横线写法

系统修饰键,CTRL 、alt 、shift、 meta(windows键)

配合keyup使用,按下修饰键时,再按下其他键,随后释放其他键,事件才会被触发

Vue.config.keyCodes.自定义键名 = 键码 可以定制按键别名

如果需要组合键的事件时:@keyup.ctrl.y表示ctrl+y键生效

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>05键盘事件</title>
    <script src="./js//vue.js"></script>
</head>
<body>
    <div id="demo">
        <input type="text" placeholder="回车键事件" @keyup.enter="but1"></input><br />
    </div>
    <script type="text/javascript">
        let vm = new Vue({
            data() {
                return { name: 'hanzhe' }
            },
            methods: {
                but1(event) {
                    // KeyboardEvent 
                    console.log(event.target.value)
                }
            }
        })
        vm.$mount("#demo")
    </script>
</body>
</html>
相关推荐
xuhaoyu_cpp_java7 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
小宋加油啊9 小时前
机械臂抓取物体 PVN3D算法调研学习
学习·算法·3d
原则猫9 小时前
HOOKS 背后机制
前端
码语智行9 小时前
首页导航跳转功能深度解析-系统内和系统外
前端
Xzh042310 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
阿猫的故乡10 小时前
Vue过渡动画从入门到装X:淡入淡出、滑动、列表动画、第三方库全搞定
前端·javascript·vue.js
裕波10 小时前
Vue&ViteConf 2026 将于 7 月 18 日在上海举办,尤雨溪将现场发表主题演讲
vue.js·vite
IManiy10 小时前
总结之Vibe Coding前端骨架
前端
JS菌10 小时前
AI Agent 沙箱双层防护体系:从权限过滤到内核隔离的完整实现
前端·人工智能·后端
做cv的小昊10 小时前
计算机图形学:【Games101】学习笔记08——光线追踪(辐射度量学、渲染方程与全局光照、蒙特卡洛积分与路径追踪)
图像处理·笔记·学习·计算机视觉·游戏引擎·图形渲染·概率论