Нарисовать прямоугольник на картинке за мышью
Здравствуйте! Простите если такой вопрос уже поднимался - не нашла((
Есть картинка <img> на страничке, на картинке карта мира. Нужно чтобы можно было за мышью нарисовать прямоугольную область - отлавливаю события onmousedown и onmouseup, а также отслеживаю положение курсора мыши. Но я не знаю какими средствами рисовать прямоугольник между этими двумя событиями... Может библиотеки есть какие и функции? Подскажите пожалуйста! |
Цитата:
|
дааа...вы имеете ввиду задать стиль
borderи переписовывать див при смещении мышки на каждый пиксель....как-то это геморно...див вообще наложиться на img? я думала есть способы рисования линий и прямоугольников... |
Цитата:
Цитата:
Цитата:
|
эх..наверно придется так действовать....Спасибо за идею!
|
:victory: сделала!
Создаем три слоя - нижний картинка, средний - выделяемая прямоугольная область, верхний - отлов событий мыши. Вот код: <DIV id="map_image" style="Z-INDEX: 0; POSITION: absolute; BACKGROUND-COLOR: #d0f0c0; WIDTH: 720px; HEIGHT: 360px; TOP: 1px; CURSOR: crosshair; layer-background-color: #7bc41e" ><IMG src="myimg.jpg"/></DIV> <DIV id="selected_area" style="Z-INDEX: 1; POSITION: absolute; WIDTH: 0px; HEIGHT: 0px; TOP: 1px; LEFT: 0px; BACKGROUND-COLOR: transparent; CURSOR: crosshair; layer-background-color: transparent; border: 2px solid #ffccff;" ></DIV> <DIV id='mouse_events' name="mapimage" onmouseup="processMouseUp(event)" onmousedown="clickCheck( event)" onmousemove="processMouseMove(event)" style="Z-INDEX: 2; POSITION: absolute; BACKGROUND-COLOR: transparent; WIDTH: 720px; HEIGHT: 360px; TOP: 1px; CURSOR: crosshair; layer-background-color: transparent" ></DIV>
function processMouseMove (evt) {
if(flag_select_area==1){//если пользователь нажал но еще не отпустил кнопку мыши
var pixelX=ret_X(evt);
var pixelY=ret_Y(evt);
var div = document.getElementById("selected_area");
if(pixelY >= startY_rect){
div.style.height = pixelY - startY_rect +"px";
div.style.top = startY_rect+"px";
} else {
div.style.top = pixelY +"px";
div.style.height = startY_rect - pixelY +"px";
}
if(pixelX >= startX_rect){
div.style.width = pixelX - startX_rect +"px";
div.style.left = startX_rect+"px";
} else {
div.style.left = pixelX +"px";
div.style.width = startX_rect - pixelX +"px";
}
}
return;
}
//кнопка мыши нажата===========================================
function clickCheck (evt) {
startX_rect=ret_X(evt);
startY_rect=ret_Y(evt);
if(evt.button == 3 || evt.button == 2 ) // right click
{return false ;}
flag_select_area=1;
return true;
}
//кнопка мыши отпущена=============================================
function processMouseUp (evt) {
flag_select_area=0;
if(evt.button == 3 || evt.button == 2 ) // right click
{return false ;}
return true;
}
function ret_X(evt){ //координаты курсора
var pixelX;
if (document.all){ //IE
pixelX = evt.offsetX-sdvig_left;
}
else if (document.getElementById) { //for FF and Opera
pixelX = evt.pageX-sdvig_left;
}
return pixelX;
}
function ret_Y(evt){
var pixelY;
if (document.all){ //IE
pixelY = evt.offsetY;
}
else if (document.getElementById) { //for FF and Opera
pixelY = evt.pageY;
}
return pixelY;
}
|
А еще есть библиотека готовая, но я не поняла как при ее использовании отлавливать события мыши, а так красиво работает, посмотрите если интересно:
http://marqueetool.net/examples/ |
| Часовой пояс GMT +3, время: 21:45. |