En ce chercherais probablement plug-in de base, quelque chose comme ceci:
$.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]);
}
});
}
});
plus tard, appliquer lasso()
à tout élément et gérer les événements en conséquence:
$("#myImg")
.lasso()
.on("lassoDone", function(e, lassoPoints) {
// do something with lassoPoints
})
.bind("lassoPoint", function(e, lassoPoint) {
// do something with lassoPoint
});
lassoPoint
sera un réseau de X, Y co-ordinat es. lassoPoints
sera un tableau de lassoPoint
.
Vous devriez probablement inclure une vérification supplémentaire pour un drapeau «lasso activé» dans le gestionnaire mousedown
, afin que vous puissiez l'activer ou le désactiver indépendamment.
Je pense que l'instruction 'if' dans le gestionnaire d'événement .mousemove devrait être - if ($ (this) .is (". LassoRunning")) { – user637563
Absolument. Merci pour l'indice! – Tomalak
Nice. J'utiliserais hasClass() au lieu de is() dans ce cas cependant :-). http://jsperf.com/jquery-hasclass-vs-is-performance/6 – 10basetom