เมื่อคุณวาดเป็นcanvas
องค์ประกอบคุณเพียงแค่วาดบิตแมปในโหมดทันทีโหมดทันที
องค์ประกอบ (รูปทรงเส้นภาพ) ที่จะมีการวาดมีตัวแทนนอกจากพิกเซลที่พวกเขาใช้และสีของพวกเขาไม่มี
ดังนั้นเพื่อให้ได้เหตุการณ์การคลิกบนcanvas
องค์ประกอบ (รูปร่าง) คุณต้องจับภาพเหตุการณ์การคลิกบนcanvas
องค์ประกอบ HTML และใช้คณิตศาสตร์บางอย่างเพื่อพิจารณาว่าองค์ประกอบใดถูกคลิกหากคุณจัดเก็บความกว้าง / ความสูงขององค์ประกอบและการชดเชย x / y .
หากต้องการเพิ่มclick
เหตุการณ์ให้กับcanvas
องค์ประกอบของคุณให้ใช้ ...
canvas.addEventListener('click', function() { }, false);
เพื่อตรวจสอบว่าองค์ประกอบใดถูกคลิก ...
var elem = document.getElementById('myCanvas'),
elemLeft = elem.offsetLeft + elem.clientLeft,
elemTop = elem.offsetTop + elem.clientTop,
context = elem.getContext('2d'),
elements = [];
// Add event listener for `click` events.
elem.addEventListener('click', function(event) {
var x = event.pageX - elemLeft,
y = event.pageY - elemTop;
// Collision detection between clicked offset and element.
elements.forEach(function(element) {
if (y > element.top && y < element.top + element.height
&& x > element.left && x < element.left + element.width) {
alert('clicked an element');
}
});
}, false);
// Add element.
elements.push({
colour: '#05EFFF',
width: 150,
height: 100,
top: 20,
left: 15
});
// Render elements.
elements.forEach(function(element) {
context.fillStyle = element.colour;
context.fillRect(element.left, element.top, element.width, element.height);
});
jsFiddle
รหัสนี้แนบclick
เหตุการณ์กับcanvas
องค์ประกอบจากนั้นดันรูปร่างหนึ่ง (เรียกว่าelement
ในรหัสของฉัน) ไปยังelements
อาร์เรย์ คุณสามารถเพิ่มได้มากเท่าที่คุณต้องการที่นี่
จุดประสงค์ของการสร้างอาร์เรย์ของออบเจ็กต์คือเพื่อให้เราสามารถสืบค้นคุณสมบัติของวัตถุได้ในภายหลัง หลังจากที่องค์ประกอบทั้งหมดถูกผลักลงในอาร์เรย์แล้วเราจะวนซ้ำและแสดงผลแต่ละองค์ประกอบตามคุณสมบัติของมัน
เมื่อclick
เหตุการณ์ถูกทริกเกอร์โค้ดจะวนซ้ำผ่านองค์ประกอบและกำหนดว่าการคลิกอยู่เหนือองค์ประกอบใด ๆ ในelements
อาร์เรย์หรือไม่ หากเป็นเช่นนั้นมันจะเริ่มการalert()
ทำงานซึ่งสามารถแก้ไขได้อย่างง่ายดายเพื่อทำบางสิ่งบางอย่างเช่นลบรายการอาร์เรย์ซึ่งในกรณีนี้คุณต้องใช้ฟังก์ชันการแสดงผลแยกต่างหากเพื่ออัปเดตไฟล์canvas
.
เพื่อความสมบูรณ์ทำไมความพยายามของคุณไม่ได้ผล ...
elem.onClick = alert("hello world"); // displays alert without clicking
นี้จะกำหนดค่าตอบแทนของalert()
กับทรัพย์สินของonClick
elem
มันกำลังเรียกใช้ไฟล์alert()
.
elem.onClick = alert('hello world'); // displays alert without clicking
ในจาวาสคริปต์'
และ"
มีความหมายเหมือนกัน lexer อาจใช้['"]
สำหรับเครื่องหมายคำพูด
elem.onClick = "alert('hello world!')"; // does nothing, even with clicking
คุณกำลังกำหนดสตริงกับทรัพย์สินของonClick
elem
elem.onClick = function() { alert('hello world!'); }; // does nothing
JavaScript คำนึงถึงตัวพิมพ์เล็กและใหญ่ onclick
คุณสมบัติเป็นวิธีโบราณแนบจัดการเหตุการณ์ อนุญาตให้เชื่อมต่อกับพร็อพเพอร์ตี้ได้เพียงเหตุการณ์เดียวเท่านั้นและเหตุการณ์อาจสูญหายได้เมื่อต่ออนุกรม HTML
elem.onClick = function() { alert("hello world!"); }; // does nothing
อีกครั้ง, ' === "
.
onclick
แทนonClick