อะไรคือความแตกต่างระหว่างเหตุการณ์ที่เกิดกับเมาส์โอเวอร์และเมาส์เซ็นเตอร์?


153

ฉันได้ใช้เสมอmouseoverเหตุการณ์ แต่ในขณะที่อ่านเอกสาร jQuery mouseenterผมพบว่า ดูเหมือนว่าพวกเขาจะทำงานเหมือนกันทุกประการ

มีความแตกต่างระหว่างทั้งสองหรือไม่และถ้าเป็นเช่นนั้นฉันควรใช้มันเมื่อใด
(ยังใช้กับmouseoutvs mouseleave)

คำตอบ:


118

คุณสามารถลองตัวอย่างต่อไปนี้ได้จากหน้าเอกสาร jQuery มันเป็นการสาธิตเชิงโต้ตอบเล็กน้อยที่ทำให้ชัดเจนและคุณสามารถเห็นด้วยตัวคุณเอง

ในระยะสั้นคุณจะสังเกตเห็นว่าการวางเมาส์เหนือเหตุการณ์เกิดขึ้นในองค์ประกอบเมื่อคุณอยู่เหนือองค์ประกอบนั้นมาจากองค์ประกอบย่อยหรือองค์ประกอบหลัก แต่เมาส์เข้าสู่เหตุการณ์จะเกิดขึ้นเมื่อเมาส์เคลื่อนย้ายจากนอกองค์ประกอบนี้ไปยังองค์ประกอบนี้

หรือตามที่mouseover()เอกสารวางไว้:

[ .mouseover()] สามารถทำให้เกิดอาการปวดหัวจำนวนมากเนื่องจากเหตุการณ์เดือด ตัวอย่างเช่นเมื่อตัวชี้เมาส์เลื่อนไปที่องค์ประกอบด้านในในตัวอย่างนี้เหตุการณ์การวางเมาส์จะถูกส่งไปยังสิ่งนั้นจากนั้นไหลไปสู่ด้านนอก สิ่งนี้สามารถทริกเกอร์ตัวจัดการการวางเมาส์ที่ถูกผูกไว้ของเราในเวลาที่ไม่เหมาะสม ดูการอภิปรายสำหรับ.mouseenter()ทางเลือกที่มีประโยชน์


40
ไม่เป็นความจริงเลยว่าmouseenter"จะเกิดขึ้นเมื่อเมาส์เคลื่อนย้ายจากองค์ประกอบหลักไปยังองค์ประกอบ" เท่านั้น เหตุการณ์เกิดขึ้นเมื่อเมาส์เปลี่ยนจากการอยู่นอกองค์ประกอบเป็นภายใน ไม่สำคัญว่าเมาส์มาจากองค์ประกอบใด เป็นความจริงที่ว่าเม้าส์มักจะมาจากพ่อแม่ แต่ไม่เสมอไป เช่นหากผู้ปกครองไม่มีช่องว่างภายในหรือเส้นขอบจากนั้นเมาส์สามารถป้อนตรงจากปู่ย่าตายายและmouseenterจะยังคงยิง ในความเป็นจริงมันสามารถป้อนองค์ประกอบจากนอกวิวพอร์ต (ถ้าองค์ประกอบอยู่ที่ขอบ) และเหตุการณ์ยังคงยิง
callum

2
DEMO เป็นคำอธิบายที่ดีที่สุด;)
Luckylooke

จริงเพียงแค่เล่นกับตัวอย่าง
Kevin Wheeler

43

Mouseenter และ MouseLeave ไม่ตอบสนองต่อเหตุการณ์เดือดในขณะที่การวางเมาส์และ mouseout ทำ

นี่คือบทความที่อธิบายพฤติกรรม


6
สิ่งนี้อธิบายได้อย่างสมบูรณ์แบบ: bl.ocks.org/mbostock/5247027 การวางเมาส์เหนือเกิดขึ้นทุกครั้งที่ถูกไล่ออกจากภายในคอนเทนเนอร์เนื่องจากเหตุการณ์เดือด
Rafael Emshoff

4

มักจะเป็นจริงกับคำถามเช่นนี้ quirksmode มีคำตอบที่ดีที่สุด

ฉันคิดว่าเพราะหนึ่งในเป้าหมายของ jQuery คือการทำให้สิ่งต่าง ๆ ไม่เชื่อเรื่องเบราว์เซอร์การใช้ชื่อเหตุการณ์ใดเหตุการณ์หนึ่งจะทำให้เกิดพฤติกรรมแบบเดียวกัน แก้ไข: ขอบคุณโพสต์อื่น ๆ ตอนนี้ฉันเห็นว่านี่ไม่ใช่กรณี


0
$(document).ready(function() {
$("#outer_mouseover").bind
("Mouse Over Mouse Out",function(event){
console.log(event.type," :: ",this.id);})
$("#outer_mouseenter").bind
("Mouse enter Mouse leave",function(event){
console.log(event.type," :: ",this.id);})
 });


หากองค์ประกอบของคุณไม่มีองค์ประกอบลูก แต่ถ้าองค์ประกอบนั้นมีลูกก็จะมีพฤติกรรมต่างกัน โดยสรุปถ้าคุณส่งเม้าส์ของคุณไปยังองค์ประกอบและจากนั้นไปสู่ลูกของมันเม้าส์โอเวอร์ / เม้าส์จะยิงได้ทั้งคู่ในขณะที่มีเพียงคนเดียวที่จะยิงเม้าส์เนื่องจากเมาส์ของคุณยังคงเป็นองค์ประกอบทางเทคนิค
เผยแพร่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.