- Операторы
- Управляющие инструкции
- JS Объекты
- браузер BOM
- HTML DOM
- События
- Объект Event
- Mouse
- Keyboard
- Frame/Object
- Form
- Drag & Drop
- Clipboard
- Media
- CSS Animation
- CSS transitions
- Touch
- HTML Объекты
- Промисы, async/await
- Сетевые запросы
- Бинарные данные и файлы
- Модули
- Классы
- Разное
События объектов и фреймов
- beforeunload
- Событие происходит, перед тем как документ будет выгружен.
- error
- Событие срабатывает при возникновении ошибки, которая происходит при загрузке внешнего файла.
- DOMContentLoaded
- Событие происходит, когда браузер полностью загрузил HTML и построил DOM-дерево.
- hashchange
- Событие происходит при изменении якорной части текущего URL.
- load
- Событие происходит, когда загрузка объекта завершена.
- unload
- Событие происходит при выгрузке страницы.
- pageshow
- Событие происходит, когда пользователь переходит на веб-страницу, т.е. после того как страница становится доступна пользователю.
- pagehide
- Событие происходит, когда пользователь уходит со страницы.
- resize
- Событие происходит при изменении размеров окна браузера.
- scroll
- Событие происходит, когда вы прокручиваете содержимое элемента, имеющего полосу прокрутки.
beforeunload
Событие beforeunload происходит, перед тем как документ будет выгружен. Это событие позволяет отображать дополнительное сообщение в диалоговом окне подтверждения "Вы действительно хотите покинуть эту страницу?". Стандартное сообщение, которое появляется при закрытии документа, может отличаться в разных браузерах. Но его Вы не можете изменить или удалить, Вы можете только с помощью этого метода добавить к нему собственное сообщение, которое будет отображаться вместе с сообщением по умолчанию.
Для создания пользовательского сообщения используется свойствоevent.ReturnValue = "пользовательское-Сообщение"
В Firefox будет отображаться только сообщение по умолчанию
Поддерживаемые HTML-теги
<body>Совместимость с браузерами
![]() | ![]() | ![]() | ![]() | ![]() |
| Да | Да | Да | Да | 15,0 |
Пример
<a href="new.html">Попытайтесь загрузить другую страницу в этот <b>iFrame</b></a>
<script>
window.onbeforeunload = function(event) {
event.returnValue = "Вы покидаете этот блок....";
};
</script>
error
Событие error срабатывает при возникновении ошибки, которая происходит при загрузке внешнего файла (например, документа или изображения).Поддерживаемые HTML-теги
<img>, <input type="image">, <object>, <script> и <style>Пример
<img src="imageN.gif" onerror="f(event)" alt="Для примера" />
<script>
function f(event)
{
event = event || window.event;
var target = event.target || event.srcElement;
Alert(target.src + '\nНЕ НАЙДЕН');
}
</script>
DOMContentLoaded
Событие DOMContentLoaded происходит на document и поддерживается во всех браузерах, кроме IE8-.
Обработчик на него вешается только через addEventListener:
document.addEventListener("DOMContentLoaded", ready);
Пример
<script>
function ready()
{ Alert( 'DOM готов' );
Alert( "Размеры картинки: " + img.offsetWidth + "x" + img.offsetHeight );
}
document.addEventListener("DOMContentLoaded", ready);
</script>
<span id="demo"></span>
<img id="img" src="images/yozhik.jpg" />
В этом примере обработчик DOMContentLoaded сработает сразу после загрузки документа, не дожидаясь получения картинки.
Поэтому на момент вывода alert и сама картинка может будет невидна и её размеры – неизвестны (кроме случая, когда картинка взята из кеша браузера).
В своей сути, событие onDOMContentLoaded – простое, как пробка. Полностью создано DOM-дерево – и вот событие. Но с ним связан ряд существенных тонкостей.
DOMContentLoaded и скрипты
Если в документе есть теги <script>, то браузер обязан их выполнить до того, как построит DOM. Поэтому событие DOMContentLoaded ждёт загрузки и выполнения таких скриптов.
Исключением являются скрипты с атрибутами async и defer, которые подгружаются асинхронно.
Побочный эффект: если на странице подключается скрипт с внешнего ресурса (к примеру, реклама), и он тормозит, то событие DOMContentLoaded и связанные с ним действия могут сильно задержаться.
DOMContentLoaded и стили
Внешние стили никак не влияют на событие DOMContentLoaded. Но есть один нюанс.
Если после стиля идёт скрипт, то этот скрипт обязан дождаться, пока стиль загрузится:
Такое поведение прописано в стандарте. Его причина – скрипт может захотеть получить информацию со страницы, зависящую от стилей, например, ширину элемента, и поэтому обязан дождаться загрузки style.css.
Побочный эффект – так как событие DOMContentLoaded будет ждать выполнения скрипта, то оно подождёт и загрузки стилей, которые идут перед <script>.
Автозаполнение
Firefox/Chrome/Opera автозаполняют формы по DOMContentLoaded.
Это означает, что если на странице есть форма для ввода логина-пароля, то браузер введёт в неё запомненные значения только по DOMContentLoaded.
Побочный эффект: если DOMContentLoaded ожидает множества скриптов и стилей, то автозаполнение не сработает до полной их загрузки.
Эмуляция DOMContentLoaded для IE8-
Прежде чем что-то эмулировать, заметим, что альтернативой событию onDOMContentLoaded является вызов функции init из скрипта в самом конце BODY, когда основная часть DOM уже готова:
<body>
...
<script>
init();
</script>
</body>
Причина, по которой обычно предпочитают именно событие – одна: удобство. Вешается обработчик и не надо ничего писать в конец BODY.
Если вы всё же хотите использовать onDOMContentLoaded кросс-браузерно, то нужно либо подключить какой-нибудь фреймворк – почти все предоставляют такой функционал, либо использовать функцию из мини-библиотеки jquery.documentReady.js.
Несмотря на то, что в названии содержится слово «jquery», эта библиотечка не требует jQuery. Наоборот, она представляет собой единственную функцию с названием $, вызов которой $(callback) добавляет обработчик callback на DOMContentLoaded (можно вызывать много раз), либо, если документ уже загружен – выполняет его тут же.
Пример использования:
<script src="jquery.documentReady.js"></script>
<script>
$(function() { alert( "DOMContentLoaded" ); });
</script>
<img src="images/igels.png" alt=''>
<div>Текст страницы</div>
Здесь alert сработает до загрузки картинки, но после создания DOM, в частности, после появления текста. И так будет для всех браузеров, включая даже очень старые IE.
hashchange
Событие hashchange происходит при изменении якорной части (начинается с символа '#') текущего URL.
Поддерживаемые HTML-теги
<body>Совместимость с браузерами
![]() | ![]() | ![]() | ![]() | ![]() |
| 5,0 | 8,0 | 3,6 | 5,0 | 10,6 |
Пример
<p>Из-за разных настроек браузера это событие может не всегда работать должным образом.</p>
<button onclick="changePart()"> Попробуй </button>
<p id="demo"></p>
<script>
window.onhashchange = f;
function changePart() {
location.hash = "partNew";
document.getElementById("demo").innerHTML = "location.hash: " + location.hash;
}
function f() { Alert("Изменилась якорная часть текущего URL!"); }
</script>
load
Событие load происходит, когда загрузка объекта завершена.
Событие load наиболее часто используется для элемента body, чтобы выполнить сценарий сразу же после того как веб-страница полностью загрузится.
Поддерживаемые HTML-теги
<body>, <frame>, <iframe>, <img>, <input type="image">, <link>, <script>, <style>Пример
<iframe id="myFrame" style="width:500px" src="help.htm">
</iframe>
<p id="demo"></p>
<script>
document.getElementById("myFrame").onload = function() {f()};
function f()
{
document.getElementById("demo").innerHTML = "Загрузка <b>iframe</b> завершена.";
}
</script>
unload
Событие unload происходит при выгрузке страницы (например, при закрытии вкладки (окна) браузера).
Из-за разных настроек браузера это событие может не всегда работать должным образом.
Поддерживаемые HTML-теги
<body>Пример
<html><body onunload="myFunction()">
<p>Закройте это окно ( клик на HTML).</p>
<p><b>Примечание.</b> Из-за разных настроек браузера это событие может не всегда работать должным образом.</p>
<script>
function myFunction() {
alert("Спасибо за просмотр этой страницы!");
}
</script>
</body></html>
pageshow
Событие pageshow происходит, когда пользователь переходит на веб-страницу, т.е. после того как страница становится доступна пользователю. Событие pageshow похоже на событие load, за исключением того, что оно срабатывает каждый раз при загрузке страницы, даже если она загружается из кэша. При первой загрузке страницы событие pageshow срабатывает сразу после события load.
Поддерживаемые HTML-теги
<body>Совместимость с браузерами
![]() | ![]() | ![]() | ![]() | ![]() |
| Да | 11,0 | Да | 5,0 | Да |
Пример
<p>В этом примере используется метод addEventListener () для присоединения к объекту окна события «pagehow».</p>
<p><b>Примечание.</b> Событие «pagehow» не поддерживается в IE10-.</p>
<h1 id="demo"></h1>
<script>
window.addEventListener("pageshow", myFunction);
function myFunction() {
document.getElementById("demo").innerHTML = "Добро пожаловать!";
}
</script>
pagehide
Событие pagehide происходит, когда пользователь уходит со страницы (событие pagehide происходит до события unload). Кроме этого данное событие, в отличие от события unload не препятствует кэшированию страницы.
Поддерживаемые HTML-теги
<body>Совместимость с браузерами
![]() | ![]() | ![]() | ![]() | ![]() |
| Да | 11,0 | Да | 5,0 | Да |
Пример
<body onpagehide="myFunction()">
resize
Событие resize происходит при изменении размеров окна браузера.
Совет: Чтобы получить размер окна браузера, используйте свойства clientWidth, clientHeight, innerWidth , innerHeight , outerWidth , outerHeight , offsetWidth и/или offsetHeight.
Поддерживаемые HTML-теги
<body>scroll
Событие scroll происходит, когда вы прокручиваете содержимое элемента, имеющего полосу прокрутки.
Поддерживаемые HTML-теги
<address>, <blockquote>, <body>, <caption>, <dd>, <dir>, <div>, <dl>, <dt>, <fieldset>, <form>, <h1> - <h6>, <html>, <li>, <menu>, <object>, <ol>, <p>, <pre>, <select>, <tbody>, <textarea>, <tfoot>, <thead>, <ul>Пример
<style>
.test { background-color: yellow; }
#myP { position: fixed; top: 50px; left: 50px; font-size: 24px;
width: 500px; text-align: center;}
</style>
<p id="myP"></p>
<p style="margin-top:800px"></p>
<script>
var p = document.getElementById("myP"), t = 'Прокрутите страницу вниз';
p.innerHTML = t;
window.onscroll = function() {myFunction()};
function myFunction()
{ if (document.body.scrollTop > 50 || document.documentElement.scrollTop > 50)
{ p.className = "test";
p.innerHTML = "А теперь прокрутите страницу вверх"
}
else { p.className = ""; p.innerHTML = t; }
}
</script>




