var invertedCells = {}; jQuery('#logo_mask').live('mousemove', function(e){ var target = jQuery(this).prev(); var targetNode = target[0]; var sizeX = 9; var sizeY = 9; var offsetX = 7; var offsetY = 6; var offset = target.offset(); var x = e.pageX - offset.left - offsetX; var y = e.pageY - offset.top - offsetY; var cellX = Math.floor(x / sizeX); var cellY = Math.floor(y / sizeY); if (cellX in invertedCells) { if (cellY in invertedCells[cellX]) return false; } else { invertedCells[cellX] = {} } invertedCells[cellX][cellY] = true; x = cellX*sizeX+offsetX; y = cellY*sizeY+offsetY; if (x + sizeX > target.width) sizeX = target.width - x; if (y + sizeY > target.height) sizeY = target.height - y; Pixastic.process(targetNode, 'invert', { rect: { left: x, top: y, width: sizeX, height: sizeY } }); });