Khi bạn vẽ đến một canvas
phần tử, bạn chỉ cần vẽ một bitmap ở chế độ ngay lập tức .
Các yếu tố (hình dạng, đường thẳng, hình ảnh) được vẽ không có đại diện bên cạnh các pixel chúng sử dụng và màu sắc của chúng.
Do đó, để có được sự kiện nhấp chuột trên một canvas
phần tử (hình dạng), bạn cần nắm bắt các sự kiện nhấp chuột trên canvas
phần tử HTML và sử dụng một số phép toán để xác định phần tử nào được nhấp, miễn là bạn đang lưu trữ phần tử chiều rộng / chiều cao và x / y của phần tử .
Để thêm một click
sự kiện vào thành canvas
phần của bạn , hãy sử dụng ...
canvas.addEventListener('click', function() { }, false);
Để xác định phần tử nào đã được nhấp ...
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 .
Mã này gắn một click
sự kiện vào canvas
phần tử và sau đó đẩy một hình dạng (được gọi là element
trong mã của tôi) vào một elements
mảng. Bạn có thể thêm nhiều như bạn muốn ở đây.
Mục đích của việc tạo ra một mảng các đối tượng là để chúng ta có thể truy vấn các thuộc tính của chúng sau này. Sau khi tất cả các phần tử đã được đẩy lên mảng, chúng tôi lặp lại và kết xuất từng phần tử dựa trên các thuộc tính của chúng.
Khi click
sự kiện được kích hoạt, mã lặp qua các phần tử và xác định xem lần nhấp có vượt qua bất kỳ phần tử nào trong elements
mảng không. Nếu vậy, nó kích hoạt một cái alert()
, có thể dễ dàng sửa đổi để làm một cái gì đó như loại bỏ mục mảng, trong trường hợp đó bạn cần một chức năng kết xuất riêng để cập nhật canvas
.
Để hoàn thiện, tại sao các nỗ lực của bạn không hoạt động ...
elem.onClick = alert("hello world"); // displays alert without clicking
Này được gán giá trị trả về alert()
đến onClick
tài sản của elem
. Nó ngay lập tức gọi alert()
.
elem.onClick = alert('hello world'); // displays alert without clicking
Trong JavaScript, '
và "
giống hệt nhau về mặt ngữ nghĩa, từ vựng có thể sử dụng ['"]
để trích dẫn.
elem.onClick = "alert('hello world!')"; // does nothing, even with clicking
Bạn đang gán một chuỗi cho thuộc onClick
tính của elem
.
elem.onClick = function() { alert('hello world!'); }; // does nothing
JavaScript là trường hợp nhạy cảm. Tài onclick
sản là phương pháp cổ xưa của việc gắn xử lý sự kiện. Nó chỉ cho phép một sự kiện được gắn với thuộc tính và sự kiện có thể bị mất khi tuần tự hóa HTML.
elem.onClick = function() { alert("hello world!"); }; // does nothing
Một lần nữa , ' === "
.
onclick
thay vìonClick