$.fn.extend({
lasso: function () {
this.mousedown(function (e) {
// left mouse down switches on "capturing mode"
if (e.which === 1 && !$(this).is(".lassoRunning")) {
$(this).addClass("lassoRunning");
$(this).data("lassoPoints", []);
$(this).trigger("lassoBegin");
//alert("here");
}
});
this.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")]);
}
});
this.mousemove(function (e) {
// mouse move captures co-ordinates + triggers "Point" event
if ($(this).is(".lassoRunning")) {
var point = [e.offsetX, e.offsetY];
$(this).data("lassoPoints").push(point);
$(this).trigger("lassoPoint", [point]);
}
});
return this;
}
});
$(document).ready(function() {
$("#myDiv")
.lasso()
.on("lassoBegin", function(e, lassoPoints) {
log("lassoBegin");
c2 = document.getElementById('myCanvas').getContext('2d');
c2.fillStyle = '#0F0';
c2.beginPath();
c2.moveTo(e.pageX, e.pageY);
// log("lasso begins..." + e.pageX + "," + e.pageY);
})
.bind("lassoPoint", function(e, lassoPoint) {
c2.lineTo(lassoPoint[0], lassoPoint[1] );
c2.fill();
log(lassoPoint[0] + "," + lassoPoint[1]);
})
.on("lassoDone", function(e, lassoPoints) {
// do something with lassoPoints
c2.closePath();
//c2.fill();
log("lasso done. ");
CreateArea(lassoPoints);
});
});
function CreateArea(_lassoPoints) {
}
<div id="myDiv">
<canvas id="myCanvas"></canvas>
</div>
<div id="log"></div><input type="button" value="Clear Log" onclick="ClearLog()"/>
<script type="text/javascript">
var canvas=document.getElementById('myCanvas');
var ctx=canvas.getContext('2d');
ctx.fillStyle='#FF0000';
ctx.fillRect(0,0,280,300);
</script>
<script>
function log(s) {$('#log').append(s + "<br>"); }
function ClearLog() {$('#log').empty();}
</script>