2013-09-27 148 views
7

Làm cách nào để ràng buộc di chuột qua hoặc bất kỳ sự kiện nào cho vấn đề đó với đối tượng được vẽ trên canvas? Ví dụ: Tôi đã thử điều này:Sự kiện di chuột qua canvas HTML5

var c=document.getElementById("myCanvas"); 
var ctx=c.getContext("2d"); 
ctx.beginPath(); 

//STEP ONE 
var stepOneRec = ctx.rect(20, 60, 266, 50); 
ctx.stroke(); 
stepOneRec.addEventListener("mouseover", function() { alert('it works!'); }); 

Trên một trang web tôi đã xem nó cho thấy phương pháp sử dụng Kinetic.js. Nếu đó là cách duy nhất, tôi sẽ sử dụng nó, tôi chỉ giả định rằng có một cách để liên kết các sự kiện với các phần tử được vẽ mà không cần thêm các trình cắm thêm. Xin lỗi Canvas noob. Tôi đã thực hiện một fiddle với mã của tôi ở đây: http://jsfiddle.net/jyBSZ/2/

Trả lời

4

(Tôi bắt đầu này như một bình luận được đăng, sau đó nhận ra đó là một câu trả lời thực tế.)

Thật không may, trong javascript trên riêng của nó, bạn không thể. Không có các đối tượng canvas, chỉ toàn bộ canvas và bất cứ thứ gì bạn vẽ vào ngữ cảnh của nó. Các plugin như động có thể tạo ra các đối tượng cho bạn, nhưng toàn bộ điểm của canvas là trình duyệt có thể nghĩ nó là một hình ảnh tĩnh đơn.

Nếu muốn, bạn có thể liên kết sự kiện mousemove với canvas, theo dõi vị trí của nó và vị trí bạn vẽ đồ vật, và ngụ ý rằng bạn đã vượt qua "đối tượng đó" (những plugin bổ sung hiệu quả), nhưng đó là tất cả các sự kiện mousemove trên một canvas duy nhất chứ không phải các sự kiện di chuột trên các thành phần của nó. (Bạn thậm chí có thể làm cho sự kiện ràng buộc của bạn mô phỏng một sự kiện mouseover cho "đối tượng", nhưng bên dưới, nó vẫn dựa trên kiểm tra chuyển động và kiểm tra thiết lập đối tượng của riêng bạn.)

+1

Ohh! Tôi đã ở trên trang web này (http://hakim.se/experiments/html5/blob/03/) và tôi đã cố gắng xem cách anh ta xử lý các sự kiện chuột của mình, tôi đoán nó chỉ thông qua corrdinartes. – user2287474

+0

@ user2287474 Anh ấy đã giảm thiểu mã chính của mình, điều này khiến cho việc này khó thực sự. Bên trong js/blob.min.js, tôi có thể thấy rằng hầu hết các chức năng của anh ta để xử lý các sự kiện là đầu tiên, nhưng nó quá khó để diễn giải tốt. (Tôi thấy mọi thứ nhìn vào bàn phím bấm và các sự kiện liên lạc). Ông đã tạo ra các đối tượng để giữ thông tin hiển thị, nhưng ở đâu đó trong đó, ông đã hiển thị tất cả các đối tượng trên mỗi hoạt ảnh. –

+1

Tôi nghĩ anh ấy có nghĩa là sự kiện mousemove. Sử dụng sự kiện mousemove để theo dõi vị trí, sau đó là câu lệnh có điều kiện để "làm điều gì đó" khi nó đến trong khu vực của đối tượng. –

2

Các đối tượng được vẽ trong phần tử canvas không phải là các phần tử HTML , chỉ các pixel và do đó sẽ không ném các sự kiện DOM theo cách mà các phần tử HTML sẽ làm.

Bạn cần tự theo dõi vị trí của đối tượng và xử lý sự kiện 'onmousemove' canvas để xác định thời điểm chuột vượt qua một trong các đối tượng được vẽ của bạn.

2

bạn có thể sử dụng jCanvas, hãy xem here

tôi đã làm một ví dụ jsfiddle cho vấn đề của bạn.

chỉ cần sửa đổi callbacks tiếp theo cho kết quả mong muốn

function mouseOut(layer){ 
$("#mouse-over-text").html('none options selected'); 
} 

function mouseIn(layer){ 
$("#mouse-over-text").html(getTextForId(layer.name)); 
} 
Các vấn đề liên quan