Analisis mendalam tentang objek acara Acara dalam JS
Selepas peristiwa berlaku, objek acara (Acara) akan dijana, mewakili status acara. Artikel berikut akan memberi anda pemahaman yang mendalam tentang Peristiwa objek acara dalam JS dan tafsiran terperinci mengenainya. Saya harap ia akan membantu semua orang!
1. Apakah objek peristiwa Acara
Apabila setiap peristiwa dicetuskan, objek peristiwa yang sepadan akan dihasilkanevent
, yang mengandungi unsur-unsur yang mencetuskan peristiwa, status, kedudukan, dsb. papan kekunci dan tetikus.
Setiap kali pengguna mencetuskan peristiwa, JS akan menjana objek event
secara automatik Bergantung pada peristiwa pencetus, objek ini mengandungi kandungan yang berbeza Contohnya, jika peristiwa klik dicetuskan oleh tetikus, MouseEvent
objek akan dihasilkan 🎜> objek, yang mengandungi kedudukan tetikus dan kandungan lain; KeyboardEvent
- objek mewakili status acara, seperti elemen yang mencetuskan acara, status kekunci papan kekunci, kedudukan tetikus, status butang tetikus, dsb. .;
event
- objek ialah parameter tersirat dan hanya sah semasa objek
event
- akan mempunyai sifat yang berbeza bergantung pada kaedah pencetus, yang bermaksud bahawa sesetengah sifat adalah hanya sah untuk acara tertentu. Tetapi semua kandungan diwarisi daripada objek
event
Event
- dalam penyemak imbas seperti
dan
event
> mewakili peristiwa pencetus. Elemen perlu diperoleh menggunakanIE
dalamChrome
; objekevent.target
IE
event.srcElement
itu sendiri ialah pembina yang boleh digunakan untuk menjana kejadian baharu.
Event
event = new Event(type, options);
ialah objek, menunjukkan konfigurasi objek acara. Objek ini terutamanya mempunyai dua sifat berikut. Event
type
options
- : Nilai Boolean, pilihan, lalai kepada palsu, menunjukkan sama ada objek acara menggelembung.
bubbles
: Nilai Boolean, pilihan, lalai kepada palsu, menunjukkan sama ada acara itu boleh dibatalkan, iaitu sama ada acara itu boleh dibatalkan menggunakan - . Sebaik sahaja acara dibatalkan, ia seolah-olah ia tidak pernah berlaku dan tingkah laku lalai penyemak imbas untuk acara itu tidak dicetuskan.
cancelable
Event.preventDefault()
Kod di atas mencipta tika acara
var ev = new Event( 'look', { 'bubbles': true, 'cancelable': false } ); document.dispatchEvent(ev);
look
Perhatikan bahawa jika atribut dispatchEvent
tidak dinyatakan secara eksplisit sebagai
bubbles
true
Dalam kod di atas, elemen
// HTML 代码为 // <div><p>Hello</p></div> var div = document.querySelector('div'); var p = document.querySelector('p'); function callback(event) { var tag = event.currentTarget.tagName; console.log('Tag: ' + tag); // 没有任何输出 } div.addEventListener('click', callback, false); var click = new Event('click'); p.dispatchEvent(click);
menentukan mendengar semasa fasa menggelegak, jadi fungsi mendengar tidak akan dicetuskan. Jika ditulis sebagai p
, acara ini boleh dipantau semasa "fasa tangkapan". click
div.addEventListener
Sebaliknya, jika acara ini menyala pada elemen div. div.addEventListener('click', callback, true)
Kemudian, tidak kira sama ada elemen
sedang mendengar dalam fasa menggelegak atau mendengar dalam fasa menangkap, fungsi mendengar akan dicetuskan. Oleh kerana elemendiv.dispatchEvent(click);
akan sentiasa menerima acara, sekali gus menyebabkan fungsi mendengar berkuat kuasa. div
div
div
2. Atribut acara
Kami telah menyebut sebelum ini bahawa objek akan mempunyai atribut yang berbeza bergantung pada kaedah pencetus, dan kami boleh membahagikannya secara kasar kepada Empat bahagian:
event
Atribut biasa (atribut yang dimiliki sama ada dicetuskan oleh papan kekunci atau tetikus)
- Sama ada acara itu akan menggelegak, nilai Boolean; kerana tag
- akan melompat ke pautan selepas diklik, menekan Enter dalam tag
akan diserahkan secara automatik, dsb.
bubbles
Elemen yang pengendali acaranya sedang memproses acara mengembalikan objek
sama ada acara itu; Tingkah laku lalai ditindas, Boolean;cancelable
<a>
<form>
Dalam peristiwacurrentTarget
Element
Mengembalikan nombor yang mengandungi butiran acara , - dan
, ini Nombor mewakili semasa bilangan klik Dalam acara
defaultPrevented
, bilangannya sentiasa 2. Dalam acara papan kekunci dan tetikus ke atas acara, nombor ini sentiasa 0. eventPhase
返回一个代表事件处理程序发生时所在阶段的数字;
0表示当前阶段未发生其他事件;1表示当前事件在捕获阶段发生;2表示当前事件处于目标阶段;3表示当前事件处于冒泡阶段;isTrusted
表示该事件是由用户行为触发的,还是由 JS 代码触发的,布尔值;
当事件是由用户行为(点击等)触发时,值为true
,当事件是通过EventTarget.dispatchEvent()
派发的时候,这个属性的值为false
。
<ul> <li>列表1</li> <li>列表2</li> <li>列表3</li> <li>列表4</li></ul><script> document.querySelector('ul').addEventListener("click", fn1, true) document.querySelector('ul').addEventListener("click", fn1, false) document.querySelector("li").addEventListener("click", fn1, true) function fn1() { console.log(this); // 打印当前事件对象 console.log(event.eventPhase); // 打印 }</script>
点击列表1后,控制台打印如下结果:
target
返回触发该事件的目标节点,返回一个Element
对象;
target
并不一定与this
指向相同,this
指向的是当前发生事件的元素,而target
指向的是触发该事件的元素,可以将上方代码中的console.log(event.eventPhase);
换成console.log(event.target);
来具体体验一下两者的不同。
在IE
浏览器中应使用srcElement
来代替target
。type
返回触发的事件名称,例click
,keydown
等;
鼠标属性
button
当事件被触发时,哪个鼠标按钮被点击;clientX
当事件被触发时,鼠标指针的 x 轴坐标;clientY
当事件被触发时,鼠标指针的 y 轴坐标;screenX
当事件被触发时,鼠标指针的 x 轴坐标;screenY
当事件被触发时,鼠标指针的 y 轴坐标;
键盘属性
altKey
当事件被触发时,“Alt” 是否被按下;ctrlKey
当事件被触发时,“Ctrl” 是否被按下;metaKey
当事件被触发时,“meta” 是否被按下;shiftKey
当事件被触发时,“Shift” 是否被按下;Location
返回按键在设备上的位置;charCode
当事件被触发时,触发键值的字母代码;key
按下按键时返回按键的标识符;keyCode
返回keypress
事件触发的键的值的字符代码,或者keydown
或keyup
事件的键的代码;which
返回keypress
事件触发的键的值的字符代码,或者keydown
或keyup
事件的键的代码;relatedTarget
返回与事件的目标节点相关的节点。
IE属性
cancelBubble
如果想阻止事件冒泡,必须把该属性设为true
;fromElement
对于mouseover
和mouseout
事件,fromElement
引用移出鼠标的元素;returnValue
等同于defaultPrevented
;srcElement
等同于target
;toElement
对于mouseover
和mouseout
事件,该属性引用移入鼠标的元素;x
事件发生的位置的 x 坐标;y
事件发生的位置的 y 坐标;
三、Event 方法
initEvent()
初始化新创建的Event
对象的属性;preventDefault()
阻止触发事件元素的默认行为;stopPropagation()
阻止事件冒泡;
如果想要阻止事件元素的默认行为,例如点击 <a>
标签时执行点击事件,不要跳转链接,需要在事件处理程序中调用 preventDefault
方法:
<a href="http://baidu.com">百度一下,你就知道</a> <script> document.querySelector("a").onclick = function () { event.preventDefault(); // do something } </script>
如果想要阻止事件冒泡,例如点击子元素标签时执行子元素的点击事件,而不想要执行父级元素的事件处理程序,则需要调用 stopPropagation
方法:
<ul> <li>不要触发 ul 的点击事件处理程序</li> </ul> <script> document.querySelector("ul").onclick = function () { alert("事件冒泡,触发 ul 的点击事件") } document.querySelector("li").onclick = function () { event.stopPropagation(); // do something } </script>
其他相关方法
addEventListener()
给目标元素注册监听事件;createEvent()
创建一个Event
对象;dispatchEvent()
将事件发送到目标元素的监听器上;handleEvent()
把任意对象注册为事件处理程序;initMouseEvent()
初始化鼠标事件对象的值;initKeyboardEvent()
初始化键盘事件对象的值;initMutationEvent()
初始变动事件和HTML
事件对象的值;initCustomEvent()
初始自定义事件对象的值;removeEventListener()
删除目标元素上的某个监听事件;
另外关于 createEvent
方法,根据传入参数的不同,会返回不同的 event
对象:
MouseEvents
创建鼠标事件对象,返回的对象中包含initMouseEvent()
方法;KeyboardEvent
创建键盘事件对象,返回的对象中包含initKeyEvent()
方法;KeyEvents
在firefox
中创建键盘事件对象需要传入该参数;MutationEvents
模拟变动事件和 HTML 事件的事件对象,返回的对象中包含initMutationEvent
方法;CustomEvent
创建自定义事件对象,返回的对象中包含initCustomEvent()
方法;
四、模拟事件
4.1 模拟鼠标事件
我们可以通过 createEvent()
方法可以创建一个新的 event
对象,借助 initMouseEvent()
方法来对这个鼠标事件对象的值进行初始化,该方法接受十五个参数,分别与鼠标事件中的各个属性一一对应,按照 type
、bubbles
、cancelable
、view
、detail
、screenX
、screenY
、clientX
、clientY
、ctrlKey
、altKey
、shiftKey
、、metaKey
、button
、relatedTarget
的顺序传入即可:
var oBtn = document.querySelector("button"); // 为 button 绑定事件处理程序 oBtn.addEventListener("click", function () { console.log(event); }) var event = document.createEvent("MouseEvents"); // 通过 initMouseEvent() 方法初始化鼠标事件的 event 对象 event.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, null); // 通过 dispatchEvent() 方法来触发 oBtn 上绑定的点击事件,此时浏览器打印的 event 对象为自定义的 event oBtn.dispatchEvent(event);
初始化事件对象时,最重要的是前四个参数,因为浏览器在触发事件时,这四个参数是必须的,而剩余的参数只有在事件处理程序中才会被使用,target
会在执行 dispatchEvent
方法时自动赋值;
4.2 模拟键盘事件
同样需要先使用 createEvent()
方法可以创建一个新的 event
对象,但需要使用 initKeyEvent
来对键盘事件对象的值进行初始化,该方法接收八个参数,分别于键盘事件对象中的各个属性一一对应,按照 type
、bubbles
、cancelable
、view
、key
、location
、modifiers
、repeat
的顺序传入即可。但在 firefox
中,需要按照 type
、bubbles
、cancelable
、view
、ctrlKey
、altKey
、shiftKey
metaKey
keyCode
charCode
` 的顺序传入十个参数
document.onkeydown = function () { console.log(event); } var event = document.createEvent("KeyboardEvent"); event.initKeyboardEvent("keydown", false, false, document.defaultView, "a", 0, "Shift", 0); document.dispatchEvent(event);
4.3 模拟其他事件
如果想要模拟其他事件,诸如 submit
、focus
等 HTML
和变动事件,则需要通过 MutationEvents
方法来创建事件,通过 initEvent
方法来进行初始化,按照type
、bubbles
、cancelable
、relatedNode
、preValue
、newValue
、attrName
、attrChange
的顺序传入参数。
<input type="text"> <script> var oInput = document.querySelector("input"); oInput.addEventListener("focus", function () { this.style.background = "#ccc" }) var event = document.createEvent("HTMLEvents"); event.initEvent("focus", true, false); oInput.dispatchEvent(event); </script>
4.4 自定义 DOM 事件
自定义事件不是由 DOM 原生触发的,它的目的是让开发人员创建自己的事件。要创建新的自定义事件,可以调用 createEvent("CustomEvent")
,返回的对象有一个名为 initCustomEvent()
的方法,接收 type
、bubbles
、cancelable
、detail
四个参数。
var oInput = document.querySelector("input"); oInput.addEventListener("myEvent", function () { console.log(event); }) var event = document.createEvent("CustomEvent"); event.initCustomEvent("myEvent", true, false, "自定义事件myEvent"); oInput.dispatchEvent(event);
上方代码创建了一个自定义事件,事件名为 myEvent
, 该事件可以向上冒泡,不可以执行在浏览器中的默认行为, detail
属性的值为 自定义事件myEvent
,可以在绑定该事件的元素或者元素的父级元素上绑定事件处理程序来查看 event
对象。
5. Pemprosesan keserasian acara
Terutamanya mempertimbangkan perbezaan antara IE
penyemak imbas dan Chrome
dan objek acara penyemak imbas lain, empat atribut berikut perlu diproses Pengendalian khas:
mendapat
event
objekvar event = event || window.event;
mendapat
target
objekvar target = event.target || event.srcElement;
Halang kelakuan lalai penyemak imbas
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
Cegah acara menggelegak
event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);
[Cadangan berkaitan: tutorial pembelajaran javascript]
Atas ialah kandungan terperinci Analisis mendalam tentang objek acara Acara dalam JS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian Pengenalan: Dengan perkembangan teknologi yang berterusan, teknologi pengecaman pertuturan telah menjadi bahagian penting dalam bidang kecerdasan buatan. Sistem pengecaman pertuturan dalam talian berdasarkan WebSocket dan JavaScript mempunyai ciri kependaman rendah, masa nyata dan platform merentas, dan telah menjadi penyelesaian yang digunakan secara meluas. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian.

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan sistem pemantauan masa nyata Pengenalan: Dengan perkembangan pesat teknologi Internet, sistem pemantauan masa nyata telah digunakan secara meluas dalam pelbagai bidang. Salah satu teknologi utama untuk mencapai pemantauan masa nyata ialah gabungan WebSocket dan JavaScript. Artikel ini akan memperkenalkan aplikasi WebSocket dan JavaScript dalam sistem pemantauan masa nyata, memberikan contoh kod dan menerangkan prinsip pelaksanaannya secara terperinci. 1. Teknologi WebSocket

Pengenalan kepada cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata: Dengan populariti Internet dan kemajuan teknologi, semakin banyak restoran telah mula menyediakan perkhidmatan pesanan dalam talian. Untuk melaksanakan sistem pesanan dalam talian masa nyata, kami boleh menggunakan teknologi JavaScript dan WebSocket. WebSocket ialah protokol komunikasi dupleks penuh berdasarkan protokol TCP, yang boleh merealisasikan komunikasi dua hala masa nyata antara pelanggan dan pelayan. Dalam sistem pesanan dalam talian masa nyata, apabila pengguna memilih hidangan dan membuat pesanan

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian Dalam era digital hari ini, semakin banyak perniagaan dan perkhidmatan perlu menyediakan fungsi tempahan dalam talian. Adalah penting untuk melaksanakan sistem tempahan dalam talian yang cekap dan masa nyata. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian dan memberikan contoh kod khusus. 1. Apakah itu WebSocket? WebSocket ialah kaedah dupleks penuh pada sambungan TCP tunggal.

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Pengenalan: Hari ini, ketepatan ramalan cuaca sangat penting kepada kehidupan harian dan membuat keputusan. Apabila teknologi berkembang, kami boleh menyediakan ramalan cuaca yang lebih tepat dan boleh dipercayai dengan mendapatkan data cuaca dalam masa nyata. Dalam artikel ini, kita akan mempelajari cara menggunakan teknologi JavaScript dan WebSocket untuk membina sistem ramalan cuaca masa nyata yang cekap. Artikel ini akan menunjukkan proses pelaksanaan melalui contoh kod tertentu. Kami

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Penggunaan: Dalam JavaScript, kaedah insertBefore() digunakan untuk memasukkan nod baharu dalam pepohon DOM. Kaedah ini memerlukan dua parameter: nod baharu untuk dimasukkan dan nod rujukan (iaitu nod di mana nod baharu akan dimasukkan).

JavaScript ialah bahasa pengaturcaraan yang digunakan secara meluas dalam pembangunan web, manakala WebSocket ialah protokol rangkaian yang digunakan untuk komunikasi masa nyata. Menggabungkan fungsi berkuasa kedua-duanya, kami boleh mencipta sistem pemprosesan imej masa nyata yang cekap. Artikel ini akan memperkenalkan cara untuk melaksanakan sistem ini menggunakan JavaScript dan WebSocket, dan memberikan contoh kod khusus. Pertama, kita perlu menjelaskan keperluan dan matlamat sistem pemprosesan imej masa nyata. Katakan kita mempunyai peranti kamera yang boleh mengumpul data imej masa nyata
