Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.06.2011, 23:35
Новичок на форуме
Посмотреть профиль Найти все сообщения от Enters
 
Регистрация: 15.06.2011
Сообщений: 2

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

На странице есть слой с 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; };
 }

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

Может быть, кто-нибудь знает, что здесь можно сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 16.06.2011, 00:21
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

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 вот тут.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #3 (permalink)  
Старый 16.06.2011, 10:24
Новичок на форуме
Посмотреть профиль Найти все сообщения от Enters
 
Регистрация: 15.06.2011
Сообщений: 2

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в коде Js, Неправильно работает скрипт. Julia Panatova Общие вопросы Javascript 1 19.01.2011 14:12
Ошибка в коде Js, Неправильно работает скрипт. Julia Panatova Общие вопросы Javascript 7 07.01.2011 13:41
Скрипт неправильно работает в FF InviS Общие вопросы Javascript 6 11.04.2010 16:56
AJAX - заполнение select - неправильно работает в Mozilla 5.0 С.Тарасов AJAX и COMET 0 17.06.2009 00:58
java-script фотогалерея, неправильно работает в ИЕ6 Scroll Internet Explorer 1 03.12.2008 14:16