вызовом onclick релевантных элементов? Предполагаю, что у каждого элемента есть координаты и браузер бежит по всем элементам и сравнивает координаты... Или я ошибаюсь и там какая-то оптимизация?
по дереву бежит же
У события клика точно есть координаты. У элементов тоже. Элементы лежат слоями в стопке, одни глубже другие ближе к тебе так сказать. Событие распространяется от тебя в глубь слоёв, потом обратно. Распространение можно прервать в коде, если так нужно. Не всё в доме слушает клик. Вот такие оптимизации. Что оставлено программисту, что-то оптимизируется в браузере. Но точно никто не бегает по всем дом элементам и не спрашивает --- Там на пиксель нажали, тебя интересует такая информация?
эта "стопка" получается и есть оптимизация, работающая отдельно от DOM?
Я так предполагаю, иначе зачем она нужна. А то что слои есть это точно.
слои нужны не для какой-либо оптимизации, а в первую очередь для того чтобы правильно отрендерить дерево элементов в бразуере. Хорошая статья про dom события на русском: https://ichi.pro/ru/3-fazy-sobytia-javascript-52710433319683
там только про event bubbling, а не детали реализации, или я не нашел?) бегло прочитал
на самом деле это походу машинный перевод статьи из цикла Javascript in Plain English 😔 надо оригинал найти. Там есть про фазы захвата и всплытия, сама внутрибраузерная реализация не раскрывается, но я сильно сомневаюсь, что она представляет какой-то интерес.
так интересует именно она я так понял, у автора изначального вопроса появилась задачка где нужно реализовать отслеживание клика по элементам, например клон фигмы делает) (это мои догадки)
Ну вот человек как раз и проявил интерес к внутренней реализации, я только поделился своими рассуждениями.
Это и на лёнжс есть, да и вообще в любой книге где про дом речь идёт
не совсем так, большинство руководств опускают подробности про фазу захвата и сразу переходят к всплытию)
интересно, там эта оптимизация за какое время позволяет клик на элемент отправить (в браузере)? за О(1)?
Не знаю, там где читал, везде про три фазы. Я правда много забыл уже так как мало прогаю
Честно говоря не знаю. Знаю что превратить в ад ux можно легко.
Спасибо большое! Да, я собираюсь нечто подобное на канвасе реализовать в Dart, ибо готовой либы нету. Интересно, попробую затормозить браузер, создам 10к вложенных дивов и попробую покликать:)
учтите что там та же фигма использует С++, не знаю как с производительностю у дарта, но даже так фигма бывает тупит и подлагивает
Обсуждают сегодня