โดยพื้นฐานแล้วสิ่งที่ฉันต้องการบรรลุคือการฟังเหตุการณ์ 'mousemove' ที่แนบมากับเอกสาร และเมื่อฉันวางเมาส์เหนือองค์ประกอบ ฉันจะตรวจสอบว่ามีข้อความล้นหรือไม่ และหากเป็นเช่นนั้น ฉันจะตัดทอนและเพิ่มแอตทริบิวต์ชื่อให้กับองค์ประกอบเป้าหมายด้วยข้อความแบบเต็ม เพื่อที่ เมื่อผู้ใช้วางเมาส์เหนือเบราว์เซอร์จะแสดงคำแนะนำเครื่องมือเริ่มต้นพร้อมข้อความนี้
ตรรกะนี้ทำงานได้ดีอย่างสมบูรณ์ แต่ก็มีข้อบกพร่องที่สำคัญ มันทำให้ประสิทธิภาพของแอพของฉันลดลงเพราะฉันใช้ getComputedStyle() อยู่ข้างใน
เพื่อแก้ไขปัญหานี้ ฉันพยายามใช้ RxJS debounce และใช้งานได้ดีมาก แต่หากผู้ใช้เลื่อนเมาส์อย่างรวดเร็วแล้วหยุดเพื่อให้มีเพียง 1 เหตุการณ์สำหรับองค์ประกอบนั้นที่ถูกปล่อยออกมา คำแนะนำเครื่องมือจะถูกเพิ่มใน DOM แต่ไม่แสดง
ตามที่ฉันเข้าใจสิ่งที่เกิดขึ้นจากมุมมองของเบราว์เซอร์ ทุกอย่างทำงานได้ดีเพราะเมื่อผู้ใช้วางเมาส์เหนือองค์ประกอบก็ยังไม่มีชื่อ และเมื่อเพิ่มเข้าไปแล้ว ผู้ใช้ก็จะไม่ขยับเมาส์อีกต่อไป ดังนั้นคำแนะนำเครื่องมือจึงไม่แสดง
fromEvent(document, 'mouseenter')
.pipe(
debounceTime(20),
tap(($event: Event) => {
this.addTooltip($event);
})
)
.subscribe();
คำถามคือมีใครรู้บ้างว่าฉันจะแก้ไขปัญหานี้ได้อย่างไร