ผู้ฟังเหตุการณ์ SVG: เหตุใดจึงไม่ทำงานและวิธีแก้ไข

เผยแพร่แล้ว: 2023-01-31

เมื่อพยายามเพิ่มตัวฟังเหตุการณ์ไปยัง SVG คุณอาจพบว่ามันไม่ได้ผลตามที่คุณคาดไว้ นี่เป็นเพราะ SVG ไม่รองรับรูปแบบเหตุการณ์ DOM มาตรฐาน มีสองวิธีในการแก้ไขปัญหานี้ อย่างแรกคือการใช้ไลบรารีที่มีโมเดลเหตุการณ์ที่เหมือน DOM สำหรับ SVG เช่น Svg.js ประการที่สองคือการใช้กลไกการจัดการเหตุการณ์ SVG ดั้งเดิม ซึ่งแตกต่างจากเหตุการณ์ DOM

เราสามารถแนบตัวจัดการเหตุการณ์กับ Svg ได้หรือไม่

เราสามารถแนบตัวจัดการเหตุการณ์กับ Svg ได้หรือไม่
ภาพโดย – fbcd

sva รองรับตัวจัดการเหตุการณ์หรือไม่ เป็น DOM แบบ XML ที่ให้การเข้าถึงองค์ประกอบทั้งหมด ตัวจัดการเหตุการณ์ JavaScript สามารถแนบกับองค์ประกอบได้ แต่ละรูปร่างที่วาดใน SVG จะถูกจดจำเป็นข้อมูลส่วนหนึ่ง

บทช่วยสอนแสดงวิธีจัดการข้อมูลเหตุการณ์ใน SVG และ ECMAScript เมื่อใช้อินพุตของผู้ใช้ เหตุการณ์จะต้องถูกทริกเกอร์เพื่อให้สคริปต์ทำงาน การวนซ้ำเป็นวิธีการค้นหาเหตุการณ์ของผู้ใช้หรือระบบโดยอัตโนมัติในแอปพลิเคชันที่ขับเคลื่อนด้วยเหตุการณ์ แอปพลิเคชันที่ขับเคลื่อนด้วยเหตุการณ์ส่วนใหญ่เป็นแอปพลิเคชันที่ทำงานบนคอมพิวเตอร์ เหตุการณ์คือการเชื่อมต่อระหว่าง วัตถุเหตุการณ์ และตัวจัดการเหตุการณ์ (ฟังก์ชัน javscript) ซึ่งทำโดยการเรียกวัตถุเหตุการณ์ เมื่อมีเหตุการณ์เกิดขึ้น จะสามารถเข้าถึงผู้ฟังเหตุการณ์จำนวนหนึ่งได้ องค์ประกอบเอกสารได้รับผลกระทบจากเหตุการณ์เมื่อผ่านลำดับชั้นที่ซ้อนกันและองค์ประกอบบรรพบุรุษ

แต่ละเหตุการณ์ประกอบด้วยรายการคุณสมบัติและเมธอดพื้นฐาน คุณสมบัติและวิธีการของ MouseEvents ได้มาจาก UI หรือเหตุการณ์ทั่วไป เบราว์เซอร์หรือผู้ใช้ vasga ที่แตกต่างกันมีพฤติกรรมที่แตกต่างกันสำหรับคุณสมบัติเฉพาะ UAs บางตัวไม่รวมคุณสมบัติ the.timeStamp สำหรับ MouseEvent ทุกประเภท แต่จะรวมไว้สำหรับเซ็ตย่อยเท่านั้น (เช่น คลิก) ขณะที่คนอื่นรายงานว่ากดปุ่มกลางหรือปุ่มขวาของเมาส์แต่เปิดเมนูบริบท คนอื่นรายงานว่าถูกกดแต่ไม่เปิดเมนูบริบท ขออภัย คุณสมบัติ thedetail ไม่สามารถใช้ได้ในทุก UA ออบเจกต์การแมปจะหลีกเลี่ยงความซับซ้อนในการจัดการผู้ชมที่แตกต่างจาก นักพัฒนาเนื้อหา SVG

ASV3 ไม่รองรับเหตุการณ์การกลายพันธุ์ แต่สามารถจัดการได้โดยใช้เมธอด mapApp.getScreenCTM() คุณสมบัติและวิธีการที่ใช้ได้สำหรับเหตุการณ์การกลายพันธุ์นั้นสืบทอดมาจากเหตุการณ์ทั่วไปที่เกิดขึ้นก่อนหน้า เอฟเฟกต์ของ เหตุการณ์ SVGResize สามารถมองเห็นได้ดีที่สุดโดยใช้ตัวอย่างที่ 5 ในหน้าต่างแยกต่างหากและปรับขนาด เหตุการณ์จะมีประโยชน์หากคุณต้องการให้องค์ประกอบต่างๆ ป้องกันการซูมและการแพนกล้อง สามารถตรวจจับการเลื่อนได้ เช่นเดียวกับการชดเชยผกผันสำหรับ screenCTM โดยใช้ระบบพิกัด viewBox จากนั้นเราตั้งค่าเนื้อหาของข้อความแสดงสถานะเป็น "กำลังพิมพ์อยู่" เพื่อให้ผู้ใช้สามารถพิมพ์ในกล่องข้อความได้เมื่อตั้งค่าฟังเหตุการณ์แล้ว เมธอดเป็นชื่อที่กำหนดให้

สิ่งนี้จะป้องกันไม่ให้ SVG UA ขยายเหตุการณ์ไปสู่บรรพบุรุษของมันเอง หากเราลบวิธีนี้ เหตุการณ์จะมาถึงองค์ประกอบรูท thesvg ซึ่งตัวฟังเหตุการณ์ที่กำหนดไว้ใหม่จะยกเลิกการพิมพ์ทันที ฟังก์ชัน stopTyping() ส่งคืนค่าเท็จหากตัวฟังเหตุการณ์ชั่วคราวถูกลบ ข้อความสถานะถูกตั้งค่าเป็นไม่ใช้งาน และตัวแปรประเภท typeInitialized ถูกตั้งค่าเป็นเท็จ ในกล่องข้อความแบบดั้งเดิมนี้ เราจะตรวจสอบรหัสอักขระพิเศษสองตัว: 8 สำหรับปุ่ม backspace (ในกรณีนี้ เราจะลบอักขระตัวสุดท้ายออก) หรือ 10 หรือ 13 สำหรับปุ่ม enter ใช้เมธอด evt.preventDefault() เหตุการณ์จะถูกส่งต่อไปยังเบราว์เซอร์ จำเป็นต้องมีทางลัดเบราว์เซอร์เพื่อหลีกเลี่ยงการป้อนผู้ใช้มากเกินไป

ได้ คุณสามารถแนบตัวจัดการเหตุการณ์กับองค์ประกอบ Svg โดยใช้ Javascript

เหตุการณ์ Onclick สามารถใช้เพื่อสร้างเหตุการณ์ที่กำหนดเองได้ คุณสามารถสร้างเหตุการณ์ที่จะแจ้งให้ผู้ใช้ทราบเมื่อพวกเขากำลังจะเห็นกราฟิก เพื่อให้บรรลุเป้าหมายนี้ ให้สร้างเหตุการณ์ที่กำหนดเองใน JavaScript แล้วลงทะเบียนโดยใช้องค์ประกอบตัวสร้าง 'a' ฉันจะเพิ่มตัวจัดการเหตุการณ์ใน svg โดยใช้ Javascript ได้อย่างไร สามารถใช้ JavaScript เพื่อแนบตัวจัดการเหตุการณ์กับ องค์ประกอบ SVG ใช้เมธอด EventTarget.addEventListener() คุณสามารถทำได้ เมธอดนี้อนุญาตให้ผู้ฟังหลายคนถูกกำหนดให้กับองค์ประกอบ และสามารถลบผู้ฟังได้หากจำเป็น (removeEventListener())


คุณสามารถเพิ่มฟังเหตุการณ์ในรูปภาพได้หรือไม่

คุณสามารถเพิ่มฟังเหตุการณ์ในรูปภาพได้หรือไม่
ภาพโดย – คิดพรุ่งนี้

ได้ คุณสามารถเพิ่มตัวฟังเหตุการณ์ให้กับรูปภาพได้ ตัวอย่างเช่น คุณสามารถเพิ่มตัว ฟังเหตุการณ์การคลิก ให้กับรูปภาพซึ่งจะทำให้เกิดการดำเนินการเมื่อรูปภาพถูกคลิก

ผู้ฟังรับฟังเหตุการณ์ใน กรณีผู้ฟังเหตุการณ์ ซึ่งหมายความว่าภาพจะเปลี่ยนไป หลังจากเรียกใช้เมธอด DataChanged ค่าผลรวมจะถูกอัพเดตในหน้าต่างผลลัพธ์ เมื่อคุณปิดภาพสด วัตถุฟังจะแสดงผล และฟังก์ชันตัวทำลายจะถูกเรียกใช้ ซึ่งบ่งชี้ว่าปิดแล้ว หลังจากการเปลี่ยนแปลงสี่ครั้ง สคริปต์จะไม่รับฟังการเปลี่ยนแปลงอีกต่อไป DataChanged สามารถกำหนดเป็นเหตุการณ์ที่กำหนดไว้ล่วงหน้าในภาษาสคริปต์ DM ตัวนับจะถูกปรับตามการเปลี่ยนแปลงของภาพ ผู้ฟังจะถูกลบออกจากภาพสี่ครั้งหลังจากมีการเปลี่ยนแปลง หากตรวจพบการเปลี่ยนแปลง 4 รายการหรือภาพถูกปิด ตัวทำลายจะตอบสนอง

โหลดโลโก้แล้ว

สัญลักษณ์แสดงถึงโลโก้ที่ปรากฏในโลโก้ var เมื่อต้องการค้นหา document.querySelectorAll

ฉันสามารถเพิ่ม Listener เหตุการณ์ในแท็กได้หรือไม่

ฉันจะเพิ่มตัวฟังเหตุการณ์ให้กับแท็กได้อย่างไร เมธอด addEventListener() ช่วยให้คุณเพิ่มตัวฟังเหตุการณ์ให้กับวัตถุ HTML DOM รวมถึงองค์ประกอบ HTML, เอกสาร HTML, วัตถุหน้าต่าง หรือวัตถุใดๆ ที่สนับสนุนเหตุการณ์ เช่น XMLHttpRequest

สามารถ ใช้เมธอด addEventListener เพื่อเพิ่มตัวฟังเหตุการณ์ให้กับวัตถุ HTML DOM ใดๆ เช่น องค์ประกอบ HTML, เอกสาร HTML, วัตถุหน้าต่าง หรือวัตถุอื่นๆ ที่สนับสนุนเหตุการณ์ เช่น วัตถุ xmlHttpRequest ในบทความนี้ เราจะดูวิธีแก้ปัญหา Add Event Listener To All A Tags โดยใช้ภาษาคอมพิวเตอร์ AddEventListener เปิดเผยวิธีการเพิ่มหลายเหตุการณ์ในองค์ประกอบเดียว สามารถเพิ่มเหตุการณ์ได้เพียงรายการเดียวเท่านั้นในองค์ประกอบด้วย onclick ใน JavaScript คุณสามารถเลือกองค์ประกอบ DOM ได้หลายรายการโดยใช้ตัวเลือก CSS สามารถยิงสายฟ้าฟาดได้และจะถูกจัดการเป็นส่วนหนึ่งของแต่ละองค์ประกอบ

วิธีการเลือกและวนซ้ำองค์ประกอบที่มีคลาสเดียวกันในวานิลลา Javascript

var myClasses = ของเอกสาร var คลาสของฉัน = ของเอกสาร var คลาสของฉัน = var ของเอกสาร var คลาสของฉัน = ของเอกสาร var คลาสของฉัน = เพื่อ querySelectorAll ('.myClass'); หากต้องการค้นหา ให้ใช้ '.myClass' (var I = 0; i = myClasses.length; i++) br> myClasses.length.br> el คือ el El.addEventListener('click', function()) เป็นวิธีการเพิ่ม ข้อมูลตัวฟังเหตุการณ์ Enter.target ลงใน el ();

เหตุการณ์ตัวชี้ Svg

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

แอตทริบิวต์ตัวชี้เหตุการณ์คือคุณสมบัติตัวชี้ที่สามารถใช้เป็นแอตทริบิวต์องค์ประกอบในไฟล์ SVG เราสามารถระบุได้ว่าส่วนใดของเอกสารหรือองค์ประกอบที่สามารถรับเหตุการณ์ผ่านอุปกรณ์ชี้ตำแหน่ง เช่น เมาส์ แทร็คแพด หรือนิ้วโดยใช้วิธีนี้ เหตุการณ์ตัวชี้เรียกอีกอย่างว่าคุณสมบัติอินพุตแพลตฟอร์มเว็บที่ไม่เชื่อเรื่องพระเจ้าสำหรับอุปกรณ์สำหรับการป้อนข้อมูลของผู้ใช้ เมื่อเราเพิ่มลิงก์หรือตัวฟังเหตุการณ์ไปยัง เอกสาร SVG พื้นที่โต้ตอบจะไม่เป็นรูปสี่เหลี่ยมผืนผ้าเสมอไป เป็นไปได้ที่จะระบายสีองค์ประกอบโดยไม่ต้องเปิดเผยต่อสาธารณะ หากค่าแอตทริบิวต์ที่มองเห็นได้หรือคุณสมบัติ CSS ถูกซ่อนไว้ หรือหากไม่ได้ตั้งค่าการแสดงผล สิ่งสำคัญคือต้องเข้าใจว่าค่าตัวชี้-เหตุการณ์ส่งผลต่อองค์ประกอบอย่างไร โดยรู้ว่าเมื่อใดองค์ประกอบจะถูกทาสี มองเห็นหรือไม่ การใช้คุณสมบัติ pointer-events CSS พื้นที่การคลิกของรูปภาพสามารถขยายได้

เมื่อใช้ HTML เฉพาะ auto และ none เท่านั้นที่เป็นค่าที่ถูกต้อง หากตั้งค่าการเติมเป็นไม่มี จะมองเห็นพื้นที่นี้แต่ไม่ได้ทาสี Tiffany Brown (@webinista) เป็นศิลปินที่อยู่เบื้องหลัง The Clickable Area Of An SVG image ความต้องการองค์ประกอบ Phantom จะถูกกำจัดหากใช้วิธี bounding-box ในเบราว์เซอร์ส่วนใหญ่ ค่า event.target ในรูปแบบ SVG จะเทียบเท่ากับปุ่ม HTML pointer-events=”none” ช่วยลดความจำเป็นในการส่งคำสั่ง JavaScript เฉพาะในหน่วยความจำ ทุกเบราว์เซอร์ที่รองรับ sva อนุญาตให้คุณใช้คุณสมบัติเพื่อสร้างเอกสารหรือองค์ประกอบ SVG

เหตุการณ์ตัวชี้สนับสนุน Safari หรือไม่

CSS pointer-event (สำหรับ HTML) ได้รับการสนับสนุนอย่างสมบูรณ์ใน Safari 12 และทุกคนที่เข้าชมเพจของคุณสามารถมองเห็นได้

คุณโต้ตอบกับ Svg อย่างไร

ภาษามาร์กอัปนี้ช่วยให้คุณโต้ตอบกับ svg ที่กำหนดโดยใช้ไลบรารี CSS เช่น jQuery เมื่อคุณสอบถาม thesvg คุณจะได้รับ id ขององค์ประกอบหรืออาร์เรย์ขององค์ประกอบที่เลือกโดยคลาส สามารถเชื่อมโยงกับตัวจัดการเหตุการณ์ เช่น การคลิก การวางเมาส์บนเมาส์ ป้อนเมาส์ และอื่นๆ

คลิก Svg Element Javascript

เมื่อใช้ JavaScript คุณจะสามารถเข้าถึงและจัดการ องค์ประกอบ SVG ในเอกสาร HTML ได้ ตัวอย่างเช่น คุณสามารถเปลี่ยนสีของการเติมองค์ประกอบ SVG ได้โดยเลือกองค์ประกอบนั้นและตั้งค่าคุณสมบัติ "เติม"

ฉันจะคลิกองค์ประกอบ Svg ได้อย่างไร

ก่อนอื่นเราต้องระบุองค์ประกอบก่อนที่จะใช้คลาส Actions เพื่อคลิก สิ่งสำคัญคือต้องย้ายองค์ประกอบนั้นก่อนโดยใช้เมธอด moveToElement แล้วจึงใช้วิธีคลิกเพื่อย้าย สุดท้าย เราต้องใช้เมธอด build และ execute เพื่อดำเนินการให้เสร็จสิ้น

Svgs สามารถมี Onclick ได้หรือไม่?

เมื่อคลิกองค์ประกอบ แอตทริบิวต์ onclick จะระบุสคริปต์ที่ควรทำงานในพื้นหลัง สามารถใช้องค์ประกอบต่อไปนี้เพื่อใช้แอตทริบิวต์นี้: a>