Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Неправильно работает перетаскивание слоя (https://javascript.ru/forum/css-html-internet-explorer/18076-nepravilno-rabotaet-peretaskivanie-sloya.html)

Enters 15.06.2011 23:35

Неправильно работает перетаскивание слоя
 
Здравствуйте!

На странице есть слой с overflow:hidden и с большой картинкой внутри. Содержимое слоя перетаскивается по onMouseDown такой функцией:

function Move ( e )
 {
  if ( !e ) e = window.event;
  var x = e.pageX || e.x;
  var y = e.pageY || e.y;
  var elem = document.getElementById("Layer");
  document.onmousemove = function ( e )
   {
    if ( !e ) e = window.event;
    var x2 = e.pageX || e.x;
    var y2 = e.pageY || e.y;
    elem.scrollTop -= ( y2 - y );
    y = y2;
    elem.scrollLeft -= ( x2 - x );
    x = x2;
   }
  document.onmouseup = function () { document.onmousemove = null; };
 }

В Опере, Файрфоксе, Хроме и Сафари всё работает корректно. Но в ИЕ при перетаскивании содержимое слоя, во-первых, дёргается туда-сюда (чем больше расстояние, на которое уже перетащили, тем сильнее), а во-вторых, скорость перетаскивания в два раза медленнее, чем нужно.

Может быть, кто-нибудь знает, что здесь можно сделать?

trikadin 16.06.2011 00:21

var x = e.pageX || e.x;
  var y = e.pageY || e.y;


e.x и e.y - это что? Устанавливайте слою position в absolute, и пользуйтесь clientX/clientY. Читайте тут.

P.S. И вообще, как-то странно у вас это всё реализовано... Почитайте о drag'n'drop вот тут.

Enters 16.06.2011 10:24

Спасибо за советы. Сделал через clientX и clientY (position:absolute у слоя уже было) — скорость перетаскивания стала нормальной. Дёргание полностью не исчезло, но стало значительно меньше (уже можно пользоваться).

Причём, если перетаскивать слой строго по вертикали или по горизонтали, дёргания вообще нет — оно заметно, только если перетаскивать слой по диагонали, то есть когда одновременно изменяются координаты и по x, и по y. В идеале, конечно, хотелось бы избавиться и от него.


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