Почему мой пользовательский скрипт перетаскивания не работает? - PullRequest
0 голосов
/ 01 декабря 2008

В настоящее время я пытаюсь написать собственный сценарий перетаскивания JS (из любопытства и скуки я знаю, что с фреймворком было бы намного проще). Моя цель - полностью рабочая версия FF3, IE может подождать пока.

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

Пожалуйста, смотрите [оригинальную страницу] [1] (как я уже сказал, FireFox только сейчас), чтобы понять, что происходит. Все это делается в виде div с двумя событиями (onmousedown и onmouseup) с использованием document.captureEvents (Event.MOUSEMOVE) для промежуточного перемещения. Сценарий можно найти [здесь] [2] (не обращая внимания на нижнюю часть ajax, он подготовлен для некоторых дополнительных трюков, и ошибка останется, если я ее устраню).

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

Спасибо за ваше время,

Mike

РЕДАКТИРОВАТЬ: Chrome и Safari работают.

РЕДАКТИРОВАТЬ: перевод ссылок в автономный режим, работа над новой версией.

1 Ответ

2 голосов
/ 01 декабря 2008

Ну, во-первых, это работает для меня в FF3, если вы об этом и просите.

Это не то, что вы хотите услышать, но я настоятельно рекомендую вам выбрать метод DnD из mootools, jquery или аналогичного. С точки зрения эффективности, DnD - ужасная вещь, чтобы кодировать (делал это несколько раз сам), и если вы не в состоянии (здесь не обижаться) устранять многочисленные возникающие ошибки, это просто будет огромным пустая трата времени по сравнению с простой готовой реализацией. Это это трудная вещь.

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

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

...