Vue入门学习(二)

一、事件处理

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

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

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

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

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

<!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即阻止事件冒泡,也阻止事件的默认行为。

 

<!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键生效

<!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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一季春秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值