Я что-то очень сильно туплю с зум эффектом. Сейчас при наведение на ячейку прямоугольную 128*64 пикселя (но так как они у меня накладываются друг на друга, рабочая область 128х32 обведена черной линией), я проверяю попадаю ли я в изометрическую часть ячейки, или на ее соседей (если левее или правее белых линий).
Вся магия в функции
getBoundingClientRect(). Я, чесслово, не понимаю, по видимому, как работает гугл. Потому, что 'js element screen position' далеко не сразу привел меня к этой чудесной функции. Они мне все твердили про: scrollLeft, clientLeft, offsetLeft! Идиоты.
cellmouseover: function(e){
if(!e) e = event || window.event;
var cell = e.target;
//чудо функция! положение ячейки, "начало координат"
var pos = cell.getBoundingClientRect();
var cellx=parseInt(cell.getAttribute("data-x")),
celly=parseInt(cell.getAttribute("data-y"));
this.currentdiv = cell.id;
zd = view.zoomdelta;
posx = pos.left + e.pageX;
posy = pos.top + e.pageY;
posx = posleft + e.pageX;
posy = postop + e.pageY;
//левее первой белой линии
if(posy < (64*zd - posx) / 2){
celly--;
}
//правее второй белой линии
else if(posy < (1/2)*(posx - 64*zd)){
cellx++;
}
//предыдущая и текущая ячейки
beforecell = this.currentcell;
this.currentcell = cellx+"-"+celly;
//снять выделение с прошлой и одеть на новую ячейки
if(beforecell != this.currentcell && beforecell != 0)
$(beforecell).classList.remove('selected');
$(this.currentcell).classList.add('selected');
}