Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему Div не успевает за мышкой при быстром перемещии? (https://javascript.ru/forum/misc/14718-pochemu-div-ne-uspevaet-za-myshkojj-pri-bystrom-peremeshhii.html)

PAMAC 27.01.2011 21:12

Почему Div не успевает за мышкой при быстром перемещии?
 
Добрый вечер!

<script>
var elemX = elemY = 0;
var drag = false;

function my2(event,el){
	event = event || window.event;
	elemX=event.clientX+document.body.scrollLeft-parseInt(el.style.left);
	elemY=event.clientY+document.body.scrollTop-parseInt(el.style.top);
	drag=true;
}


function my(event,el) {
	event = event || window.event;
	if(drag){
		el.style.left=event.clientX+document.body.scrollLeft-elemX;
		el.style.top=event.clientY+document.body.scrollTop-elemY;
	}
}

</script>

<div style="background-color:red; width:100px; height:100px; position:absolute; left:0px; top:0px;" onMouseDown="my2(event,this);" onMouseMove="my(event,this);"></div>


Почему div не успевает перещаться за мышкой, при быстром движении? Как это можно исправить?

ksa 27.01.2011 21:15

Цитата:

Сообщение от PAMAC
Как это можно исправить?

Как бы ты не исправлял - всегда можно так "махнуть" мышкой, что и отрисовать браузер неуспеет...

PAMAC 27.01.2011 21:17

Это да... но тут даже если совсем немного махнёшь - div не успевает((

dmitriymar 27.01.2011 21:23

учитывая что без отрисовки браузере не всегда успевает координаты все по пути считывать...

ksa 27.01.2011 21:24

PAMAC, ты например не указываеш 'px' при присвоении новых координат топу и лефту...Может так хоть рисоваться быстрее будет. :)

Gvozd 27.01.2011 21:34

обработчики событий мыши(перемещения) отрабатывают не мгновенно.
это связано в частности с однопоточностью языка.
как результат, между двумя возникшими событиями проходит время достаточное, чтобы вы успели сдвинуть мушку более чем на 1 пиксель.

А если же вы успеете за это время(что вполне реально) убрать курсор с данного DIV-а, то новые события не буду возникать.
вне DIV-а, курсор будет спокойной передвигатся, не вызывая никаких событий на DIV-е

Именно это у вас и происходит.

Вам надо отлавливать событие на более крупном контейнере(например body), а перемещать ваш конкретный DIV

PAMAC 28.01.2011 18:39

благодарю

DooMer 31.01.2011 13:32

PAMAC,
когдато давно в МСДН читал, что майкрософт не гарантирует, что окно обработает событие мыши если провести быстро быстро =)


Часовой пояс GMT +3, время: 20:41.