2012-08-04 30 views
7

Đây là một fiddle: http://jsfiddle.net/MZ9Xm/Khi tôi nhấp vào canvas và kéo chuột, con trỏ sẽ thay đổi thành con trỏ chọn văn bản. Làm thế nào tôi có thể ngăn chặn điều này?

Lưu ý: Điều sau xảy ra trong Chrome 22.0.1221.1, nhưng không có trong Firefox 14.0.1. [Ubuntu linux]

Di chuyển chuột đến canvas trên cùng và nhấn và giữ nút chuột. Kéo chuột và con trỏ sẽ thay đổi thành con trỏ chuột chọn văn bản (I-bar). Điều này không xảy ra nếu không có yếu tố nào khác trên trang.

Tôi đã rối tung xung quanh với việc đặt lựa chọn của người dùng thành không, nhưng chưa có bất kỳ may mắn nào.

+0

Liên kết [câu hỏi này] (http://stackoverflow.com/q/4945874/94197), một số nhận xét thảo luận về lỗi này. –

Trả lời

23

Bạn có thể ràng buộc sự kiện được tổ chức trong canvas của mình để ngăn chặn hành vi mặc định.

Cái gì như:

// with jQuery 
$("#canvasId").mousedown(function(event){ 
    event.preventDefault(); 
}); 

// without jQuery 
document.getElementById("canvasId").onmousedown = function(event){ 
    event.preventDefault(); 
}; 

Đây là fiddle Cập nhật: http://jsfiddle.net/MZ9Xm/1/

Bạn sẽ cần phải kiểm tra này để xem nếu có một số tác dụng phụ đến những gì bạn đang làm.

3

Bạn đã thử sử dụng CSS cursor property chưa?

canvas { 
    cursor: pointer; 
} 

Nó sẽ hiển thị con trỏ mặc định.

+0

Vâng, tôi đã thử điều này nhưng không có súc sắc. Hãy thử nó trong fiddle. Con trỏ vẫn thay đổi thành con trỏ chọn văn bản. (Trong Chrome 22.0.1221.1. Tôi không phải làm gì cả để nó hoạt động được với Firefox 14.0.1.) – shino

+0

Nó phải là một lỗi của Chrome ... Dù sao, chúng cũng có cùng một vấn đề trong [điều này thread] (http://stackoverflow.com/questions/2659999/html5-canvas-hand-cursor-problems) và có vẻ như họ đã giải quyết nó. –

+0

Tuyệt vời! Tôi tìm thấy câu trả lời ở đó (đó là câu trả lời của Damon). Tôi không chắc về giao thức ở đây. Tôi đoán nếu bạn thay đổi câu trả lời này để liên kết với damon, tôi sẽ chấp nhận nó? – shino

1

Hãy thử điều này:

var canvasEls = document.getElementsByTagName('canvas'), 
    preventHl = function() { return false; }, 
    i = 0; 

while (i < canvasEls.length) { 
    canvasEls[i].onmousedown = preventHl; 
    i += 1; 
} 

Trở sai sẽ ngăn chặn hành động mặc định như làm nổi bật xảy ra.

Các vấn đề liên quan