Скрипты: async, defer
В современных сайтах скрипты обычно «тяжелее», чем HTML: они весят больше, дольше обрабатываются.
Когда браузер загружает HTML и доходит до тега <script>...</script>, он не может продолжать строить DOM. Он должен сначала выполнить скрипт. То же самое происходит и с внешними скриптами <script src="..."></script>: браузер должен подождать, пока загрузится скрипт, выполнить его, и только затем обработать остальную страницу.
Это ведёт к двум важным проблемам:
Скрипты не видят DOM-элементы ниже себя, поэтому к ним нельзя добавить обработчики и т.д.
Если вверху страницы объёмный скрипт, он «блокирует» страницу. Пользователи не видят содержимое страницы, пока он не загрузится и не запустится:
https://learn.javascript.ru/script-async-defer
Собственное контекстное меню с использованием JavaScript
https://habr.com/ru/articles/258167/
https://github.com/callmenick/Custom-Context-Menu
Демо: http://codepen.io/SitePoint/pen/MYLoWY
https://habr.com/ru/articles/258167/
https://github.com/callmenick/Custom-Context-Menu
Демо: http://codepen.io/SitePoint/pen/MYLoWY
Малоизвестные возможности JavaScript
- Оператор void
- Скобки при вызове конструкторов необязательны
- Скобки при работе с IIFE можно не использовать
- Конструкция with
- Конструктор Function
и многое другое....
https://habr.com/ru/companies/ruvds/articles/431878/
- Оператор void
- Скобки при вызове конструкторов необязательны
- Скобки при работе с IIFE можно не использовать
- Конструкция with
- Конструктор Function
и многое другое....
https://habr.com/ru/companies/ruvds/articles/431878/
Повесить обработчик ВСЕХ событий на элемент и посмотреть какие когда срабатывают:
Код: Выделить всё
var myObj = document.querySelector('video');
for (var key in myObj) {
if (key.search('on') === 0) {
console.log("EVENT=>", key.slice(2));
myObj.addEventListener(key.slice(2), (e) => { console.log("Event worked=>", e.type, key.slice(2)); })
}
}