jquery中的event與originalEvent

最近在使用滾輪事件的時(shí)候發(fā)現(xiàn)了這樣一個(gè)問題。
因?yàn)轫?xiàng)目中引入了jquery,在添加事件綁定時(shí)我就愉快地添加了:

$('.mask').on('wheel', function (event) {
    let offset = event.deltaY
    ...
})

結(jié)果頁面報(bào)錯(cuò),告訴我說event沒有deltaY, 這就奇怪了。
我首先想到的是jquery一定封裝了event,它的事件綁定函數(shù)中的event肯定不是原生的,畢竟jquery主要就是在干這事。。。(其實(shí)這也挺好,避免污染原生對象),于是我打印了這個(gè)event,果然:

圖1

這個(gè)Event中壓根就沒有原生wheel事件中的deltaX, deltaY, deltaZ等一系列專有屬性。
將上面代碼改為原生js代碼:

document.querySelector('.mask').addEventListener('wheel', function (event) {
    let offset = event.deltaY
    ...
})

后,果然就沒問題了。
那么,如果又想用jquery,又想用這些沒有被其封裝的原生屬性怎么辦呢?
其實(shí)不難注意到,在上面打印的jquery event對象里,有一個(gè)叫做originalEvent的屬性,它的值是一個(gè)WheelEvent
咦?WheelEvent不就是原生event嗎?展開了這個(gè)屬性后,果然沒有猜錯(cuò),就是它。

Paste_Image.png

也就是說,只要我們把最開始的代碼寫成:

$('.mask').on('wheel', function (event) {
    let offset = event.originalEvent.deltaY
    ...
})

就可以順利執(zhí)行了。
我又查看了click,mouseenter等幾個(gè)事件,發(fā)現(xiàn)它們也是這樣的結(jié)構(gòu),只不過,像click這種“老資格”的事件,由于其屬性已經(jīng)很穩(wěn)定,因此jquery已經(jīng)把上面所有的原生屬性映射過來了。不需要我們過多操心,當(dāng)我們使用一些新的交互手段帶來的事件,比如一些手勢事件,或者是如本文提到的滾輪事件這種最近才有統(tǒng)一規(guī)范甚至還沒有統(tǒng)一規(guī)范的事件時(shí),如果發(fā)現(xiàn)一些原生的屬性取不到,可以嘗試使用originalEvent.
當(dāng)然啦,如果你用ES6的話,使用解構(gòu)賦值可以一勞永逸地用原生event代替jquery event作為參數(shù)傳遞:

$('.mask').on('wheel', function ({ originalEvent: event }) {
    let offset = event.deltaY
    ...
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,978評論 25 709
  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,715評論 2 10
  • 原文鏈接 http://blog.poetries.top/2016/10/20/review-jQuery 關(guān)注...
    前端進(jìn)階之旅閱讀 16,939評論 18 503
  • 虎紋在腰間婀娜,雉羽和旌髦隨風(fēng)雀躍五彩礦土在通紅的臉上明滅火燃燒、炙熱,鼓點(diǎn)聲赫赫舞動(dòng)的手、舞動(dòng)的腳口大張吧,露出...
    靜鈴音閱讀 884評論 49 98
  • 心若不傷 何來悲傷。 看淡滄桑 內(nèi)心無恙。
    蕩秋千的黑千層閱讀 217評論 0 1

友情鏈接更多精彩內(nèi)容