ฉันแค่อยากจะแบ่งปันบางสิ่งกับคุณ
ฉันมีเวลาng-mouseenter
และng-mouseleave
กิจกรรมที่ ยากลำบาก
กรณีศึกษา:
ฉันสร้างเมนูการนำทางแบบลอยซึ่งเป็นการสลับเมื่อเคอร์เซอร์อยู่เหนือไอคอน
เมนูนี้อยู่ด้านบนของแต่ละหน้า
- เพื่อจัดการแสดง / ซ่อนบนเมนูฉันสลับชั้นเรียน
ng-class="{down: vm.isHover}"
- ในการสลับvm.isHoverฉันใช้เหตุการณ์เมาส์ ng
ng-mouseenter="vm.isHover = true"
ng-mouseleave="vm.isHover = false"
สำหรับตอนนี้ทุกอย่างเรียบร้อยและทำงานตามที่คาดไว้
วิธีการแก้ปัญหานั้นสะอาดและเรียบง่าย
ปัญหาที่เข้ามา:
ในมุมมองเฉพาะฉันมีรายการองค์ประกอบ
ฉันเพิ่มแผงการกระทำเมื่อเคอร์เซอร์อยู่เหนือองค์ประกอบของรายการ
ฉันใช้รหัสเดียวกันกับด้านบนเพื่อจัดการกับพฤติกรรม
ปัญหา:
ฉันพบว่าเมื่อเคอร์เซอร์อยู่บนเมนูการนำทางลอยและที่ด้านบนขององค์ประกอบก็มีความขัดแย้งกัน
แผงการทำงานปรากฏขึ้นและการนำทางแบบลอยตัวถูกซ่อน
สิ่งนี้คือแม้ว่าเคอร์เซอร์จะอยู่เหนือเมนูการนำทางลอยองค์ประกอบรายการ ng-mouseenter จะถูกเรียกใช้
ฉันไม่เข้าท่าเพราะฉันคาดหวังว่าเหตุการณ์การแพร่กระจายเมาส์โดยอัตโนมัติ
ฉันต้องบอกว่าฉันผิดหวังและฉันใช้เวลาในการค้นหาปัญหานั้น
ความคิดแรก:
ฉันพยายามใช้สิ่งเหล่านี้:
$event.stopPropagation()
$event.stopImmediatePropagation()
ฉันรวมเหตุการณ์พอยน์เตอร์ ng จำนวนมาก (mousemove, mouveover, ... ) แต่ไม่มีใครช่วยฉัน
โซลูชัน CSS:
ฉันพบวิธีแก้ปัญหาด้วยคุณสมบัติ css อย่างง่ายที่ฉันใช้มากขึ้น:
pointer-events: none;
โดยทั่วไปฉันใช้แบบนั้น (ในรายการองค์ประกอบ):
ng-style="{'pointer-events': vm.isHover ? 'none' : ''}"
ด้วยเหตุการณ์ที่ยุ่งยากนี้เหตุการณ์ ng-mouse จะไม่ถูกเรียกใช้อีกต่อไปและเมนูการนำทางแบบลอยของฉันจะไม่ปิดตัวเองเมื่อเคอร์เซอร์อยู่เหนือและเหนือองค์ประกอบจากรายการ
หากต้องการไปเพิ่มเติม:
อย่างที่คุณคาดหวังวิธีแก้ปัญหานี้ใช้ได้ แต่ฉันไม่ชอบ
เราไม่ได้ควบคุมกิจกรรมของเราและมันก็ไม่ดี
นอกจากนี้คุณต้องมีสิทธิ์เข้าถึงvm.isHover
ขอบเขตเพื่อให้บรรลุเป้าหมายนั้นและอาจเป็นไปไม่ได้หรือเป็นไปได้ แต่สกปรกในบางวิธีหรืออย่างอื่น
ฉันสามารถทำซอหากใครต้องการดู
อย่างไรก็ตามฉันไม่มีวิธีแก้ปัญหาอื่น ...
มันเป็นเรื่องยาวและฉันไม่สามารถให้มันฝรั่งแก่คุณได้ดังนั้นโปรดยกโทษให้ฉันด้วยเพื่อนของฉัน
ยังไงก็ตามpointer-events: none
ชีวิตก็จำเอาไว้