Конфликт onmousedown и onclick
После того, как срабатывает onmousedown не выполняются события, связанные с onclick. Вот код - https://jsfiddle.net/webcodemaster/9xhLnjh0/. Зажимаете левую кнопку мыши, двигаете курсор - появляется выделяющий блок. Все норм. Но вот попробуйте кликнуть на ссылку - облом.
При этом, если закомментить в onmousedown событии строку div.hidden = 0; , то все будет работать прекрасно. Извивался и так и сяк - но если в функции события выполняется обращение к ДОМ, следующие события обламываются. При этом всем событие onmouseup отрабатывает исправно. Не срабатывает только onclick, который вообще идет после onmouseup, но конфликтует именно с onmousedown. В коде есть закомментированные участки с setTimeout(). С ними работает, но бывают глюки. А я хочу без глюков. Что же делать, как же быть? |
Собственно, вопрос, почему именно не работает onclick также очень интересует. Коллеги, кто сталкивался, какие мысли.
|
Когда блок оказывается над ссылкой, то клик идет через его маусдаун и не доходит до линка.
|
Ключевой момент в дауне:
x1 = x2 = e.pageX; y1 = y2 = e.pageY; начальные и конечные координаты надо приводить к началу событий, тогда каждый раз рамка будет начинаться с них, а не хз откуда где она кончилась в прошлый раз и, поэтому, закрыть ссылку уже не получится. Остальные мульки смотри в убдейте https://jsfiddle.net/9xhLnjh0/1/ ))) |
С setTimeout там будет полный ппц. Даже при небольшом ауте, их запросто можно запустить несколько штук, а значит будет ингресс и хрен поймешь когда что натикает. Это значит нужна функция
function stop(h){clearTimeout(h);} которую придется профтыкать перед всеми сетами stop(someTime) someTime=setTimeout(/* тряхомудия */); геморрой в общем с этими задержками. |
Да, все так. Спасибо большое! Только не маусдаун, а маусап ) даун возвращает нормальный таргет.
|
Цитата:
Ну и мув не должен ничего писать в координаты пока перо не опущено, то есть кнопка не нажата. Функции таскания элементов по странице так и работают - выставляют листенер на мув когда нажато и снимают когда отпущено, просто потому что нафиг не надо грузить комп бесполезными делами. |
Часовой пояс GMT +3, время: 16:04. |