1. 程式人生 > >Javascript和jquery事件--事件物件event

Javascript和jquery事件--事件物件event

1、  事件物件event

對於event,js的解釋是Event 物件代表事件的狀態,比如事件在其中發生的元素、鍵盤按鍵的狀態、滑鼠的位置、滑鼠按鈕的狀態。而jq的解釋是事件處理(事件物件、目標元素的獲取,事件物件的屬性、方法等)在不同瀏覽器之間存在差異,jQuery在遵循W3C規範的情況下做了封裝統一。

你的網頁需要相容不同的瀏覽器,除了樣式的不同外,更致命的就是事件物件的差異。使用console.log(e),你就可以看到相關的引數。雖然jq已經對相容進行過封裝,但是我還是想進行了解,所以先看看關於js的事件物件。

(1) Js的事件物件event

A.通過event,可以獲取到滑鼠鍵盤這些裝置的狀態,如:

  altKey, ctrlKey, metaKey, shiftKey這四個布林值,獲得的是事件發生時‘ALT’‘CTRL’‘META’‘SHIFT’鍵的狀態。

  PageX,PageY獲得滑鼠相對頁面的位置。

  clientX,clientY獲得的是滑鼠相對瀏覽器的位置。

  screenX,screenY獲得的是滑鼠相對當前頁面螢幕的位置

  offsetX,offsetY是滑鼠在觸發事件的元素中的位置。

  x,y等同screenX,screenY。

  button獲得滑鼠點選的是哪個鍵,在谷歌瀏覽器中0-左鍵,1-滾輪,2-右鍵(當然右鍵事件瀏覽器有預設事件,下面可能會提到自定義右鍵事件)。

B.除此之外,還有一些比較有用的屬性

  cancelBubble,如果事件控制代碼想阻止事件傳播到包容物件,必須把該屬性設為 true。和阻止冒泡相類似,但有所不同。

  fromElement,toElement主要用於mouseover 和 mouseout 事件

  keyCode,應該與keypress 事件,鍵盤事件有關,下文會研究。

  returnValue 可以阻止事件繼續觸發,比如超連結,表單提交,和return false相關但有所差別

  srcElement,target,觸發事件的源頭

  currentTarget,繫結監聽器的事件,和target的區別,比如,一個是最先冒泡的元素,一個可以是冒泡過程的任何一個元素。

  timeStamp         返回事件生成的日期和時間。

  type  返回當前 Event 物件表示的事件的名稱。

  bubbles     返回布林值,指示事件是否是起泡事件型別。

  eventPhase       返回事件傳播的當前階段。

  initEvent() 初始化新建立的 Event 物件的屬性。

  preventDefault()       通知瀏覽器不要執行與事件關聯的預設動作。

  stopPropagation()     不再派發事件。

  isTrusted屬性返回一個布林值,表示該事件是否為真實使用者觸發。使用者觸發的事件返回true,指令碼觸發的事件返回false。

  stopImmediatePropagation()方法阻止同一個事件的其他監聽函式被呼叫。

    如果同一個節點對於同一個事件指定了多個監聽函式,這些函式會根據新增的順序依次呼叫。只要其中有一個監聽函式呼叫了stopImmediatePropagation方法,其他的監聽函式就不會再執行了。

 

C.一些常用的相容寫法

  獲得event物件相容性寫法

    var event = e||window.event

  獲得target相容型寫法

    var target = event.target||event.srcElement

  阻止瀏覽器預設行為相容性寫法

    event.preventDefault ? event.preventDefault() : (event.returnValue = false);

  阻止冒泡寫法

    event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);

(2)  Jq的事件物件

一些常用的屬性

  event.type:獲取事件的型別,觸發元素的事件型別

  event.pageX 和 event.pageY:獲取滑鼠當前相對於頁面的座標,可以確定元素在當前頁面的座標值,是以頁面為參考點,不隨滑動條移動而變化

  event.target:獲取觸發事件的元素

      js中事件是會冒泡的,所以this是可以變化的,但event.target不會變化,它永遠是直接接受事件的目標DOM元素;

     this和event.target都是dom物件,可以轉換為jquery物件:$(this)和$(event.target)

  event.which:獲取在滑鼠單擊事件中滑鼠的左、中、右鍵(左鍵1,中間鍵2,右鍵3),在鍵盤事件中鍵盤的鍵碼值

  event.currentTarget : 獲取冒泡前的當前觸發事件的DOM物件, 等同於this

  event.preventDefault() :阻止預設行為,可以用 event.isDefaultPrevented() 來確定preventDefault是否被呼叫過了

  event.stopPropagation() :阻止事件冒泡,事件是可以冒泡的,為防止事件冒泡到DOM樹上,不觸發任何前輩元素上的事件處理函式,可以用 event.isPropagationStopped() 來確定stopPropagation是否被呼叫過了

參考:

https://www.cnblogs.com/wuln/p/6251486.html

https://www.cnblogs.com/songyaqi/p/5204143.html

https://blog.csdn.net/knock_me/article/details/79646105

https://blog.csdn.net/weixin_41342585/article/details/80659736

https://blog.csdn.net/baihuaxiu123/article/details/53148780(重要)

https://blog.csdn.net/u012528184/article/details/41724275

(returnVlaue=false和reture false)