を既存の任意の投げ縄のボックスの寸法は何かを、これはおそらく次のようになります。
$.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。 lassoPoints
はlassoPoint
の配列になります。
mousedown
ハンドラに「lasso enabled」フラグを追加して、別々にオンまたはオフに切り替えることができます。
私は、.mousemoveイベントハンドラの 'if'ステートメントは - であるべきだと思います。if($(this).is( "。lassoRunning")){ – user637563
絶対に。ヒントありがとう! – Tomalak
いいです。この場合、is()の代わりにhasClass()を使用します:-)。 http://jsperf.com/jquery-hasclass-vs-is-performance/6 – 10basetom