Mouse Pointer Proximity Distance Testing

by skibulk

HTML

<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>

CSS

* {
    box-sizing: border-box;
    margin: 0;
    border: 0;
    padding: 0;
}

td {
	width: 100px;
	height: 100px;
	text-align: center;
	vertical-align: middle;
    background: gray;
}

JavaScript

var i, offset, centerX, centerY, dist;
var tile, tiles = $$('td');

$('html').mousemove(function(event) {
    for (i=0; i<tiles.length; i++) {
        tile = tiles[i];
        offset  = tile.offset();
        centerX = offset.left + tile.width()/2;
        centerY = offset.top  + tile.height()/2;
        dist = distance(centerX, centerY, event.pageX, event.pageY);
        tile.html(Math.round(dist));
        if(dist<100) {
             tile.css('background','orange');   
        }
        else
        {
             tile.css('background','gray');   
        }
    }
});

function $$(selector) {
    var out = $(selector);
    for (i=0; i<out.length; i++) out[i] = $(out[i]);
    return out;
}

function distance(x1, y1, x2, y2) {
    return Math.sqrt( (x2-=x1)*x2 + (y2-=y1)*y2 );
}