Почему 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 не успевает перещаться за мышкой, при быстром движении? Как это можно исправить? |
Цитата:
|
Это да... но тут даже если совсем немного махнёшь - div не успевает((
|
учитывая что без отрисовки браузере не всегда успевает координаты все по пути считывать...
|
PAMAC, ты например не указываеш 'px' при присвоении новых координат топу и лефту...Может так хоть рисоваться быстрее будет. :)
|
обработчики событий мыши(перемещения) отрабатывают не мгновенно.
это связано в частности с однопоточностью языка. как результат, между двумя возникшими событиями проходит время достаточное, чтобы вы успели сдвинуть мушку более чем на 1 пиксель. А если же вы успеете за это время(что вполне реально) убрать курсор с данного DIV-а, то новые события не буду возникать. вне DIV-а, курсор будет спокойной передвигатся, не вызывая никаких событий на DIV-е Именно это у вас и происходит. Вам надо отлавливать событие на более крупном контейнере(например body), а перемещать ваш конкретный DIV |
благодарю
|
PAMAC,
когдато давно в МСДН читал, что майкрософт не гарантирует, что окно обработает событие мыши если провести быстро быстро =) |
| Часовой пояс GMT +3, время: 14:45. |