2011-01-10 11 views
4

ヘイ、私は単純なウェブベースのイメージメーカーを作成していて、だれかがスクロールツールを実装する方法を知っているかどうかを知りたいと思います。私はすべてのポイントを保存して、データベースに簡単に送信し、後でそれらを取得できるようにしたいと思います。Lasso tool in javascript

どのような提案も素晴らしいでしょう。私はそれを使用していないだけで http://odyniec.net/projects/imgareaselect/examples.html

ことをやっているようだ

答えて

6

を既存の任意の投げ縄のボックスの寸法は何かを、これはおそらく次のようになります。

$.fn.extend({ 
    lasso: function() { 
    return this 
     .mousedown(function (e) { 
     // left mouse down switches on "capturing mode" 
     if (e.which === 1 && !$(this).is(".lassoRunning")) { 
      $(this).addClass("lassoRunning"); 
      $(this).data("lassoPoints", []); 
     } 
     }) 
     .mouseup(function (e) { 
     // left mouse up ends "capturing mode" + triggers "Done" event 
     if (e.which === 1 && $(this).is(".lassoRunning")) { 
      $(this).removeClass("lassoRunning"); 
      $(this).trigger("lassoDone", [$(this).data("lassoPoints")]); 
     } 
     }) 
     .mousemove(function (e) { 
     // mouse move captures co-ordinates + triggers "Point" event 
     if ($(this).hasClass(".lassoRunning")) { 
      var point = [e.offsetX, e.offsetY]; 
      $(this).data("lassoPoints").push(point); 
      $(this).trigger("lassoPoint", [point]); 
     } 
     }); 
    } 
}); 

後に、任意の要素にlasso()を適用し、それに応じてイベントを処理:

$("#myImg") 
.lasso() 
.on("lassoDone", function(e, lassoPoints) { 
    // do something with lassoPoints 
}) 
.bind("lassoPoint", function(e, lassoPoint) { 
    // do something with lassoPoint 
}); 

lassoPointはX、Y共ordinatの配列であろうes。 lassoPointslassoPointの配列になります。

mousedownハンドラに「lasso enabled」フラグを追加して、別々にオンまたはオフに切り替えることができます。

+1

私は、.mousemoveイベントハンドラの 'if'ステートメントは - であるべきだと思います。if($(this).is( "。lassoRunning")){ – user637563

+0

絶対に。ヒントありがとう! – Tomalak

+1

いいです。この場合、is()の代わりにhasClass()を使用します:-)。 http://jsperf.com/jquery-hasclass-vs-is-performance/6 – 10basetom

2

相続人のプラグイン。

は、私は1つを作ったことがありませんが、あなたがあなた自身の作るために探している場合、IDは、彼らは、レコードの初期マウスCOORDSれるonmousedown

(これは投げ縄のボックスの隅のCOORDSである)のような働きを想像します

onmousemoveビジュアル・ラッソ・ボックスに使用されているdivの幅と高さを取得するために、新しい座標を最初の座標から減算します。

れるonmouseup、MOUSEMOVEを聞い停止は、COORDSと基本的なプラグインとして

+3

私は、OPが長方形のマーキーではなく自由形のローレットを探していると思います。 – casablanca

+0

@casablancaしかし、imgselectareaは素晴らしいツールです! – dotty

+0

私は、イメージ領域の選択と印刷機能のために、以前はAdobe Flexで自由形式のラッソーを作ってきました。 2つのニッチが最初にあります。あなたはラッソーをしたときに内側の領域を決定するために "巻線アルゴリズム"を使用する必要があり、第2に、自由形式のラッソ上で行進するアリに対しては、対角45度の平行線 - マーチング・アント効果を得るために、45度で上下に流れるようにアニメートするパターンマスク境界矩形。 –