LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

Vue中的事件修饰符

2022/5/12 vue

vue中的事件修饰符:

1.prevent:阻止默认事件

2.stop:阻止事件冒泡

3.once:事件只触发一次

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

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

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

ps:vue中事件修饰符可以连着写,如:@click.stop.prevent阻止事件冒泡和默认事件,效果与@click.prevent.click相同

1.prevent:点击a链接时会执行alert事件,然后跳转到百度,prevent阻止跳转到百度的默认事件

<a href="http://www.baidu.com" @click="demo">阻止默认行为1</a>
<a href="http://www.baidu.com" @click.prevent="demo2">阻止默认行为2</a>
methods:{
    demo(e){
        e.preventDefault()//阻止默认行为
        alert('同学,你好')
    },
    demo2(){
         alert('同学,你好')
    }
}

2.stop:点击button,其showmsg事件时会冒泡到父元素身上,父元素也会执行showmsg事件,stop阻止showmsg事件冒泡到父元素身上

 <div @click="showmsg" style="width: 200px;height:200px;background-color:#ccc">
      <button @click="showmsg">阻止冒泡事件1</button>
 </div>
 <div @click="showmsg2" style="width: 200px;height:200px;background-color:#ededed">
      <button @click.stop="showmsg2">阻止冒泡事件2</button>
 </div>
methods:{
   showmsg(e) {
          e.stopPropagation()
          alert('同学你好')
          },
  showmsg2() {
          alert('同学你好')
          }
}

3.once:事件只触发一次,后面事件不再触发

 <button @click.once="showmsg">事件只触发一次</button>

4.capture:事件分为捕获阶段和冒泡阶段,先捕获再冒泡,捕获阶段是由外到内的,冒泡阶段是由内到外的,假如没有阻止事件冒泡,应先输出2再输出1,capture则在捕获阶段处理事件,所以先输出1,再输出2

 <div @click="showinfo(1)" style="width: 200px;height:200px;background-color:#ededed">
     <div @click="showinfo(2)" style="height: 100px; width:100px;background-color:#ccc">捕获事件</div>
 </div>
 methods:{
      showinfo(number) {
          console.log(number)//2 1
      }
 }
 
 
  <div @click.capture="showinfo(1)" style="width: 200px;height:200px;background-color:#ededed">
     <div @click="showinfo(2)" style="height: 100px; width:100px;background-color:#ccc">捕获事件</div>
 </div>
 methods:{
      showinfo(number) {
          console.log(number)//1 2
      }
 }

5.self:e.target是当前操作元素时才触发,当div中的click事件使用.self修饰符时,点击button,由于e.target是button而不是当前div,所以没有触发div中的事件

  <div @click="demo" style="width: 200px;height:200px;background-color:#ededed">
     <button @click="demo" style="height: 100px; width:100px;background-color:#ccc">e.target</button>
  </div>
  methods:{
       demo(e) {
            console.log(e.target)//点击button时输出两次button代码,因为e.target是button
       }
  }

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

​ scroll和wheel的区别:scroll是监听滚动条的滚动事件,鼠标滚轮和键盘上下键都可以触发,滚动条到底后再往下则不触发;whell监听的是鼠标滚轮的滚动事件,只要鼠标滚轮滚动就会触发事件。

  <ul @wheel="demo" style="height:200px;width:200px;background-color:#ccc;overflow: auto;">
         <li style="height: 100px;">1</li>
         <li style="height: 100px;">2</li>
         <li style="height: 100px;">3</li>
         <li style="height: 100px;">4</li>

  </ul>
  methods:{
       demo() {
             for (i = 0; i < 100000; i++) {
                console.log("xxx")
             }
            console.log("完成")

       }
  }

如果没加.passive修饰符,会先执行for循环,然后再滑动,加了以后不用等待for循环结束,直接滑动

img_show