В настоящее время я пытаюсь написать свой собственный JS-скрипт перетаскивания (из чистого любопытства и скуки, я знаю, что с фреймворком было бы намного проще). Моя цель - полностью рабочая версия Firefox3, IE пока может подождать.
Я просто застрял на странной ошибке. Когда я перетаскиваю div в первый раз, он работает нормально. Когда я перетаскиваю его во второй раз, он не прилипает после отпускания кнопки, и мне нужно щелкнуть еще раз, чтобы его снять. Третье и последующие затяжки снова работают безупречно (!?!).
Пожалуйста, посмотрите [исходную страницу] [1] (как я уже сказал, FireFox пока только), чтобы понять, что происходит. Все это делается как div с двумя событиями (onmousedown и onmouseup) с использованием document.captureEvents (Event.MOUSEMOVE) для промежуточного перемещения. Скрипт можно найти [здесь] [2] (не обращайте внимания на нижнюю часть ajax, она подготовлена для некоторых дополнительных уловок, и ошибка останется, если я ее устраню).
Пожалуйста, дайте мне знать, если вы сталкивались с чем-то подобным в прошлом или если вы где-то заметили ошибку. Я знаю, что могут быть лучшие способы обойти все это, но я специально ищу способ заставить свой подход работать.
Обновлено: Chrome и Safari работают.
Обновлено: перевод ссылок в автономный режим, работа над новой версией.
О, спасибо, не пробовал. Safari тоже работает.
Теперь, когда вы удалили ссылки, ваш вопрос не очень полезен. Пожалуйста, предоставьте источник в ваших сообщениях, чтобы другие могли извлечь выгоду из сообщества так, как вы.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ну, во-первых, это работает для меня в FF3, если вы об этом спрашиваете.
Это не будет тем, что вы хотите услышать, но я настоятельно рекомендую вам выбрать метод DnD из mootools, jquery или аналогичных. Просто с точки зрения эффективности, DnD - ужасная вещь для кодирования (я делал это несколько раз сам), и если вы не способны (здесь не оскорбления) исправлять многочисленные возникающие ошибки, это просто будет огромной проблемой. трата вашего времени по сравнению с тем, чтобы просто использовать надежную зрелую реализацию с полки. Это является сложно сделать.
Если вы сделаете то, что нужно для продолжения работы со своим собственным кодом (в качестве упражнения или из гордости - я могу это оценить :)), такая проблема обычно является результатом того, что событие не фиксируется там, где вы думаете, потому что какое-то другое событие помешал первым, флаг не установлен там, где вы думаете, или (или из-за) ошибки, которая вырывается из вашего кода в неожиданный момент. Попробуйте логически отследить происходящее, отключив триггеры событий.
Если бы вы могли определить как, он не работал более подробно, я мог бы проследить его дальше (поскольку я, похоже, не могу реплицировать), но я предлагаю вам изучить преимущества надежной библиотеки.
См. Второй абзац для конкретной проблемы, первый щелчок + перетаскивание: ОК, второй щелчок + перетаскивание: событие срабатывает, если кнопка не останавливается, третий и более щелчок: ОК. Вы уверены, что это работает в вашем FF3? Потому что это все еще не в моем.
Да, def работает: Mozilla / 5.0 (Windows; U; Windows NT 5.2; en-GB; rv: 1.9.0.4) Gecko / 2008102920 Firefox / 3.0.4 Ах, хорошо, что вы получили работу.
Просто чтобы вы знали, что он работает с Chrome.