2012-03-06 29 views
5

tôi đang làm việc trên một kịch bản cho phép người dùng để vẽ với chuột: http://jsfiddle.net/ujMGu/Làm cách nào để ngăn chuyển động chuột nhanh chóng phá vỡ một dòng trong ứng dụng vẽ của tôi?

Vấn đề: Nếu bạn di chuyển con chuột thật nhanh nó giật và bỏ qua một vài nơi. Có cách nào để nắm bắt tất cả các điểm mà không có bất kỳ bỏ qua không gian màu đen ở giữa đường vẽ?

CSS

#myid{background: none repeat scroll 0 0 #000000; 
    color: #FFFFFF; 
    display: block; 
    height: 1000px; 
    margin: 3%; 
    position: relative; 
    text-indent: -1100px;}​ 

JS/JQ

$('#myid') 
.css('position','relative') 
.unbind().die() 
.bind('mousemove mouseover',function (e){ 
var top = parseInt(e.pageY)-$(this).offset().top; 
var left= parseInt(e.pageX)-$(this).offset().left; 
var pixel= $('<div></div>') 
    .css({ 
     width:10,height:10, 
     background: '#fff', 
     position:'absolute', 
     top: top, left: left, 
     'border-radius': 2 
    }); 
    $(this).append(pixel); 
});​ 

HTML

<div id="myid"></div> 
+1

Có thể là một ý tưởng tồi khi làm điều này với các div; hãy cân nhắc sử dụng canvas. Hầu hết các trình duyệt sẽ nhanh hơn với canvas so với div, vì divs yêu cầu thao tác DOM thay vì chỉ vẽ raster. –

+0

vẽ theo cách này (sử dụng divs làm pixel) là khá hạn chế. Yêu cầu của bạn là gì và bạn cần hỗ trợ trình duyệt nào? Có một lý do bạn cần phải sử dụng phương pháp này hơn là (nói) canvas? –

+0

coz im không phải rất quen thuộc với canvas, và tôi cần một cái gì đó đơn giản để tôi có thể gửi cho người khác một cách phức tạp, như một lớp phủ/mặt nạ trên đầu trang của một cái gì đó khác đằng sau nó. – Val

Trả lời

3

Kiểm tra này ra: http://jsfiddle.net/KodeKreachor/9DbP3/6/

Đối tượng sau vào liên kết được chứa các thuật toán:

var drawer = new Drawer(); 

Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào về cách tôi đã làm điều đó. Tiền đề được dựa trên thuật toán dòng của Bresenham và phải tương thích với các trình duyệt cũ hơn.

+1

Niceeeee, cũng giống như thế này là tốt :), tôi cũng có thể chấp nhận tất cả các câu trả lời của bạn lol, tôi không biết cái nào để chọn :) là câu trả lời đúng, tất cả các bạn đều có câu trả lời đúng cách khác :) – Val

+0

Vui vì nó đã làm việc cho bạn. Canvas là một cách tuyệt vời để đi và chắc chắn cũng được đề xuất. Tôi chỉ muốn một cái gì đó mà sẽ làm việc trong các trình duyệt cũ hơn cũng là lý do tại sao tôi thực hiện ví dụ này bằng cách sử dụng đơn giản divs. – KodeKreachor

3

Bạn sẽ cần phải theo dõi các điểm trước đó và sau đó vẽ một đường thẳng giữa điểm mới và điểm trước đó.

+0

+1 cho ý tưởng, mặc dù "vẽ một đường thẳng" không đơn giản khi phương pháp vẽ của bạn là hoàn toàn định vị một loạt các div 10x10. –

2

Tại sao không sử dụng canvas? Nó có một số tiện ích dòng vẽ:

http://www.w3schools.com/html5/html5_ref_canvas.asp

+0

coz Tôi đang thử nghiệm, với nó, chỉ nghĩ rằng nó sẽ được mát mẻ, và cũng vải, sẽ không làm việc với những gì tôi đã có trong tâm trí :) trừ khi tôi thực sự bắt đầu dành thời gian aloooong trên nó mà tôi không có :) nghĩ rằng điều này sẽ có nhanh hơn rất nhiều :) – Val

2

Như @kand đã đề cập, Canvas thực sự là công cụ tốt nhất để vẽ.

Nếu bạn phải sử dụng phương pháp div hoặc nếu điều này chỉ để giải trí, bạn có thể mở rộng phương pháp của mình bằng cách lưu vị trí chuột trước đó và sau đó vẽ "pixel" xen kẽ cần thiết để hoàn thành dòng bằng cách sử dụng, ví dụ: Bresenham's line algorithm .

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