Почему мой собственный скрипт перетаскивания не работает?

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

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

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

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

Обновлено: Chrome и Safari работают.

Обновлено: перевод ссылок в автономный режим, работа над новой версией.

Просто чтобы вы знали, что он работает с Chrome.

Patrick Desjardins 01.12.2008 18:35

О, спасибо, не пробовал. Safari тоже работает.

mike nvck 01.12.2008 18:38

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

Carl G 23.01.2009 03:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
387
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

См. Второй абзац для конкретной проблемы, первый щелчок + перетаскивание: ОК, второй щелчок + перетаскивание: событие срабатывает, если кнопка не останавливается, третий и более щелчок: ОК. Вы уверены, что это работает в вашем FF3? Потому что это все еще не в моем.

mike nvck 02.12.2008 10:40

Да, def работает: Mozilla / 5.0 (Windows; U; Windows NT 5.2; en-GB; rv: 1.9.0.4) Gecko / 2008102920 Firefox / 3.0.4 Ах, хорошо, что вы получили работу.

annakata 02.12.2008 11:58

Другие вопросы по теме