2012-10-14 35 views
38

Tôi đang cố gắng tạo một ứng dụng canvas đáp ứng với đầu vào bàn phím và chuột. Tôi có mã này:addEventListener cho phím tắt trên Canvas

canvas = document.getElementById('canvas'); 
canvas.addEventListener('mousedown', function(event) { 
    alert('mousedown'); 
     }, false); 
canvas.addEventListener('keydown', function(event) { 
    alert('keydown'); 
     }, false); 

Cảnh báo 'mousedown' xuất hiện bất cứ khi nào tôi nhấp chuột, nhưng cảnh báo 'keydown' không bao giờ xuất hiện. Mã giống nhau hoạt động tốt trên JS Bin: http://jsbin.com/uteha3/66/

Tại sao mã không hoạt động trên trang của tôi? Canvas không nhận ra đầu vào bàn phím?

+4

Bạn có thể' t tập trung một phần tử canvas. –

+3

'keydown' có thể chỉ được kích hoạt trên canvas nếu nó có tiêu điểm. Tôi không chắc liệu một phần tử canvas có thể có trọng tâm hay không. –

Trả lời

47

Sửa - Đây trả lời một giải pháp, nhưng một cách tiếp cận đơn giản hơn nhiều và thích hợp sẽ được thiết lập các thuộc tính tabindex trên yếu tố canvas (theo đề nghị của hobberwickey).

Bạn không thể tập trung yếu tố canvas. Một công việc đơn giản xung quanh điều này, sẽ làm cho tập trung "của riêng bạn".

var lastDownTarget, canvas; 
window.onload = function() { 
    canvas = document.getElementById('canvas'); 

    document.addEventListener('mousedown', function(event) { 
     lastDownTarget = event.target; 
     alert('mousedown'); 
    }, false); 

    document.addEventListener('keydown', function(event) { 
     if(lastDownTarget == canvas) { 
      alert('keydown'); 
     } 
    }, false); 
} 

JSFIDDLE

+1

hoạt động như một nét duyên dáng ... cảm ơn anh chàng vì giải pháp tốt nhất. –

+1

câu trả lời cũ, nhưng ngay cả trong năm 2012 bạn hoàn toàn có thể: bạn cần cung cấp cho canvas một tabindex = "" 'và mau: canvas của bạn (nhưng thực sự * bất kỳ * phần tử HTML) hiện hoạt động tốt với tiêu điểm. Câu trả lời này không được gắn cờ là chính xác, thay vào đó, câu trả lời của hobberwickey được chấp nhận. –

+0

Tôi đồng ý với bạn, nhưng vì bất cứ lý do gì, @Cbas chưa bao giờ chấp nhận câu trả lời của hobberwickeys. Tôi đã cập nhật bài đăng của mình cho khách truy cập trong tương lai để giải quyết vấn đề này. –

86

Đặt tabIndex của phần tử canvas tới 1 hoặc một cái gì đó như thế này

<canvas tabindex='1'></canvas> 

Đây là một thủ thuật cũ để thực hiện bất kỳ yếu tố có thể đặt tiêu

+1

Điều đó cũng hoạt động. – Cbas

+0

Không hoạt động, ít nhất là trong chrome mới nhất. –

+5

Tôi sẽ đặt cược bạn một triệu đô la mà nó http://jsfiddle.net/WJhGr/1/ – hobberwickey