vue教程 常見事件 與 vue事件處理

事件處理

常見js事件

1、窗口事件
onload, html文檔加載完成時觸發。

#onload html文檔加載完成時觸發。
window.onload = function(){
	//當html文檔加載完成之後,執行該回調事件。
}

onunload,html頁面離開時觸發。

#onunload html頁面離開時觸發。
window.onunload = function(){
	//當html頁面離開的時候,執行該回調函數。
}

onresize,window窗口發生變化時觸發。

#onresize window窗口發生變化時觸發。
window.onresize = function( event ){
	//當窗口的尺寸發生變化的時候調用。
}

2、表單元素相關事件
onreset, onsubmit,onsubmit用於觸發提交事件,onreset用於觸發重置事件。

#onreset,onsubmit 用在<form>表單,onsubmit用於觸發提交事件,onreset用於觸發重置事件。
#在vue中可以使用@submit.prevent, @reset.prevent來阻止默認事件。

<form action="http://www.baidu.com" method="post" @submit.prevent="test"  @reset.prevent="reset">
     表單項 <input>
     <input type="submit" value="提交表單">
     <input type="reset" value="重置表單">
</form>

onfocus,表單元素獲取焦點事件。 onblur, 表單元素失去焦點事件。

#onfocus,表單元素獲取焦點事件
#onblur,表單元素失去焦點事件 

表單元素: <input  @focus="getFocus" @blur="getBlur" />

methods: {

      getFocus(){
         alert("獲取焦點");
      },
      getBlur(){
          alert("失去焦點");
      },
}

onchange,在屬性值改變時還必須使得當前元素失去焦點(onblur)纔可以激活該事件;也就說onchange事件不能作爲輸入監聽,只能作爲一個按enter鍵確認提交的場景。

#onchange 在屬性值改變時還必須使得當前元素失去焦點(onblur)纔可以激活該事件;
也就說onchange事件不能作爲輸入監聽,只能作爲一個按enter鍵確認提交的場景。

表單元素: <input   v-model="content"  @change="change"/>
data: {
	content: '',
}
methods: {
    //onchange事件不能作爲輸入監聽,只能作爲一個按enter鍵確認提交的場景。
	change(){
		console.log("內容發生了變化");
	}
}

//在vue中,可以利用v-model雙向綁定來作爲input輸入監聽。
watch:{
	content( newValue, oldValue ){
		console.log("內容發生了變化");
	}
}

3、鼠標鍵盤相關事件
onclick, 鼠標單擊事件; ondblclick, 鼠標雙擊事件;onmousedown,鼠標按下去的事件;onmouseup,鼠標彈起事件;

#onclick, #ondblclick  單擊事件,雙擊事件
<button @click="click">單擊事件</button>
<button @dblclick="dblclick">雙擊事件</button>

methods: {
    click(){
        alert("單擊事件");
    },
    dblclick(){
        alert("雙擊事件");
    }
}

onmouseover,onmouseenter,onmouseout,onmouseleave, onmousemove 監控鼠標的移入移出,以及移動事件

#onmousemove : 鼠標在某個盒子上移動時響應的事件。
onmouseover、onmouseout:鼠標經過時自身觸發事件,經過其子元素時也觸發該事件;(父親有的東西,兒子也有) ,支持冒泡.
onmouseenter、onmouseleave:鼠標經過時自身觸發事件,經過其子元素時不觸發該事件。(父親的東西就是父親的,不歸兒子所有) ,不支持冒泡

onkeydown, onkeyup, onkeypress 監控鍵盤的按下和彈起。

#1.可以放在body上,全局監控鍵盤按下,彈起。
#2.可以放在input上,當獲取到焦點的時候,也能監控輸入。

<body  onkeyup="keyup()" >
</body>
function keyup(){
   alert(1111);
}

4、圖片,文檔加載相關事件

onerror : 圖片加載出錯的時候觸發該事件。
onabort: 這個事件沒有測試出來。。。。

綁定監聽

vue中使用v-on (簡寫爲@)來處理事件監聽. 在vue的模板中,函數實參可以用vue.data中的屬性。
v-on:click接受表達式

<div id="app" >
    <button @click="count += 1">{{count}}</button>
</div>

v-on:click接受表達式

<div id=app>
	<button @click="click(count)">{{count}}</button>
</div>

響應函數帶參數的情形

<button @click="test1">不寫括號,則默認帶有一個event參數</button>
<button @click="test2(message)">只帶指定參數,不帶event</button>
<button @click="test3('message', $event)">既帶指定參數,又帶event</button>
<button @click="test4($event)">顯示帶event</button>

事件修飾符

.stop 阻止事件繼續傳播。

#阻止事件冒泡
<a @click.stop="toNext">前往下一頁</a>

.stop 相當於在 toNext 方法上執行了 e.stopPropagation && e.cancelBubble = true;

.prevent 阻止標籤的默認事件。

#阻止默認事件行爲。
<a @click.prevent="toNext">

.prevent 相當於在 toNext 方法上執行了 e.preventDefault(),IE: e.returnValue = false;

.capture 添加事件監聽器使用事件捕獲模式,即處理順序從body->目標元素。

<!-- 添加事件監聽器時使用事件捕獲模式 -->
<!-- 即內部元素觸發的事件先在此處理,然後才交由內部元素進行處理 -->
<div v-on:click.capture="doThis">...</div>

.self 判斷event.target是自己觸發的,還是子元素冒泡過來的。.self就只接受自己觸發的事件。

<!-- 只當在 event.target 是當前元素自身時觸發處理函數 -->
<!-- 即事件不是從內部元素觸發的 -->
<div v-on:click.self="doThat">...</div>

.once 表示點擊事件只觸發一次。

#vue版本2.1.0  點擊事件將只會觸發一次.
<a v-on:click.once="doThis"></a>

.passive      passive這個修飾符會執行默認方法。你們可能會問,明明默認執行爲什麼會設置這樣一個修飾符。這就要說一下這個修飾符的本意了。

  • 瀏覽器只有等內核線程執行到事件監聽器對應的JavaScript代碼時,才能知道內部是否會調用preventDefault函數來阻止事件的默認行爲,所以瀏覽器本身是沒有辦法對這種場景進行優化的。這種場景下,用戶的手勢事件無法快速產生,會導致頁面無法快速執行滑動邏輯,從而讓用戶感覺到頁面卡頓。
  • 通俗點說就是每次事件產生,瀏覽器都會去查詢一下是否有preventDefault阻止該次事件的默認動作。我們加上passive就是爲了告訴瀏覽器,不用查詢了,我們沒用preventDefault阻止默認動作。
  • 這裏一般用在滾動監聽,@scoll,@touchmove 。因爲滾動監聽過程中,移動每個像素都會產生一次事件,每次都使用內核線程查詢prevent會使滑動卡頓。我們通過passive將內核線程查詢跳過,可以大大提升滑動的流暢度。passive和prevent衝突,不能同時綁定在一個監聽器上。     
  • 參考鏈接: https://www.jianshu.com/p/b12d0d3ad4c1
<!-- 滾動事件的默認行爲 (即滾動行爲) 將會立即觸發 -->
<!-- 而不會等待 `onScroll` 完成  -->
<!-- 這其中包含 `event.preventDefault()` 的情況 -->
<div v-on:scroll.passive="onScroll">...</div>

按鍵修飾符

對鍵盤按鍵進行過濾。

<!-- 只有在 `key` 是 `Enter` 時調用 `vm.submit()` -->
<input v-on:keyup.enter="submit">

#page-down按鈕按下
<input v-on:keyup.page-down="onPageDown">
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章