2012-03-06 14 views
5

私は、ユーザーがマウスを使って描画することができますスクリプトに取り組んでいます: http://jsfiddle.net/ujMGu/私は、描画アプリケーションでマウスの動きが速くて線を壊さないようにするにはどうすればいいですか?

問題:あなたは本当に速いマウスを移動した場合には、いくつかの場所をピクピクしてスキップします。描画線の間に黒いスペースをスキップすることなく、すべての点をキャプチャする方法はありますか?あなたがを追跡する必要があるだろう

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

おそらく、divでこれを行うのは悪い考えです。代わりにキャンバスを使用することを検討してください。 divは単純なラスターペインティングではなくDOM操作を必要とするため、ほとんどのブラウザーはdivよりもキャンバスが速くなります。 –

+0

(divsをピクセルとして使用する)この方法でのペインティングはかなり制限されています。要件とブラウザのサポートは何ですか?キャンバスではなく、このメソッドを使用する必要がある理由はありますか? –

+0

私はキャンバスにはあまりよく慣れていません。複雑なやり方で、この背後にあるものの上にオーバーレイ/マスクとして他の人にこのメッセージを送ることができます。 – Val

答えて

3

チェック:http://jsfiddle.net/KodeKreachor/9DbP3/6/

は、与えられたリンク上の次のオブジェクトは、アルゴリズムが含まれています

var drawer = new Drawer(); 

あなたなら、私を知ってみましょう私がどのようにそれをやったかについては何か質問があります。前提はBresenhamのラインアルゴリズムに基づいており、古いブラウザでも互換性があるはずです。

+1

Niceeeee、これはまあまあです:)また、私はあなたの答えのすべてを受け入れることができます笑、私はどちらを選択するかわからない:)正しい答えとして、あなたはすべて正しい答えを持ってdiffの方法:) – Val

+0

それはあなたのために働いてうれしい。キャンバスは行くのにも最適な方法です。私は古いブラウザでもうまくいくようなものを望んでいたので、単純なdivを使ってこの例を実装しました。 – KodeKreachor

3

新しい点と前の点の間に線を引く。

+0

+1のアイデアは、あなたのペインティングの方法が10x10個のdivを連続的に配置することである場合、「線を描く」ことは簡単ではありません。 –

2

なぜキャンバスを使用しないのですか?これは、ユーティリティを線画の数を持っています。このうち

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

+0

私は実際にそれを持っていない時間をaloooongに費やし始めない限り、私は心に持っていたものではうまくいかないと思っていました。もっと早くなったよ:) – Val

2

@kandが述べたように、Canvasは本当に描画に最適なツールです。

divメソッドを使用する必要がある場合やこれが楽しいだけの場合は、以前のマウス位置を保存してから、行を完成させるために必要な間にある "ピクセル"を描画することができます。たとえば、Bresenham's line algorithm

関連する問題