есть 2 картинки и canvas, первая картинка рисуется полностью на весь canvas.
А вторую нужно показывать по частям, при чём не кругами или квадратами, а полигонами. Грубо говоря нужно сделать подсветку части картинки при наведении на неё, и обратное. (данная задача уже выполнена в плагине mapster для jquery, но мне нужно сделать без jquery, а библиотека без него не работает)
функция для определения в попадания точки в полигон есть
function isPointInPoly(poly, pt){
for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)
((poly[i].y <= pt.y && pt.y < poly[j].y) || (poly[j].y <= pt.y && pt.y < poly[i].y))
&& (pt.x < (poly[j].x - poly[i].x) * (pt.y - poly[i].y) / (poly[j].y - poly[i].y) + poly[i].x)
&& (c = !c);
return c;
}
и вот так я получаю полигоны на которые нужно реагировать:
var tmp2 = [],tmp,i,n,areas = document.getElementsByTagName('area'), len = areas.length, coords = [];
//в массиве areas все элементы по тегу area, len - его длина, coords - массив результата.
//идём по массиву areas и в массив tmp2 забиваем координаты, после этого забиваем
//этот набор координат, как единое целое в массив результат coords - т.е. там
//в итоге массив полигонов представленный точками
for (n = 0; n < len; n++) {
tmp = areas[n].coords.split(',');
for (i=0;i<tmp.length-1;i+=2)tmp2.push({x: tmp[i], y: tmp[i+1]});
coords.push(tmp2);
tmp2=[];
}
areas =[];
(результат в массиве - coords)
мапа в коде из которой получаем координаты
<map name="map1">
<area shape="poly" coords="16,107,68,107,68,159,16,159" alt="один" href="">
...
</map>
В общем нашел решение(там есть описание на английском)
для себя же я сократил код так (по скольку мне не нужно делать обводку):
//пример параметра poly - [{x:2,y:2},{x:10,y:10},{x:50,y:50}]
//img2 - картинка которую хотим нарисовать
function drawpart(poly){
var i=0;
ctx.save();
ctx.beginPath();
ctx.moveTo(poly[0].x, poly[0].y);
for(i =1;i<poly.length;i++)
{
ctx.lineTo(poly[i].x, poly[i].y);
}
ctx.clip();
ctx.drawImage(img2, 0, 0);
ctx.restore();
}
всё отлично, только та функция для определения попадания точки в полигон работает не правильно.. буду рад ссылкам
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Консоль выдает ошибку unknown column 'Tomas' in 'field list'
Есть список категорий и у каждой категории есть потомки(они хранится в одной таблице Group(id, name, parent_id) и у каждого потомка есть в другой таблице...