Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

Пример 17.1. Вызов функций, когда документ будет готов к выполнению операций

/*

* Передайте функции whenReady свою функцию, и она вызовет ее (как метод

* объекта документа), как только завершится синтаксический анализ документа

* и он будет готов к выполнению операций. Зарегистрированные функции

* вызываются при первом же событии DOMContentLoaded, readystatechange или load.

* Как только документ станет готов и будут вызваны все функции,

* whenReady немедленно вызовет все функции, которые были ей переданы.

*/

var whenReady = (function { // Эта функция возвращается функцией whenReady

var funcs = []; // Функции, которые должны вызываться по событию

var ready = false; // Получит значение true при вызове функции handler

// Обработчик событий, который вызывается, как только документ

// будет готов к выполнению операций

function handler(e) {

// Если обработчик уже вызывался, просто вернуть управление

if (ready) return;

// Если это событие readystatechange и состояние получило значение,

// отличное от "complete", значит, документ пока не готов

if (e.type==="readystatechange" && document.readyState !== "complete") return;

// Вызвать все зарегистрированные функции.

// Обратите внимание, что здесь каждый раз проверяется значение

// свойства funcs.length, на случай если одна из вызванных функций

// зарегистрирует дополнительные функции.

for(var і = 0; і < funcs.length; i++) funcs[і].call(document);

// Теперь можно установить флаг ready в значение true и забыть

// о зарегистрированных функциях

ready = true;

funcs = null;

}

// Зарегистрировать обработчик handler для всех ожидаемых событий

if (document.addEventListener) {

document.addEventListener("DOMContentLoaded", handler, false);

document.addEventListener("readystatechange", handler, false);

window.addEventListener("load", handler, false);

}

else if (document.attachEvent) {

document.attachEvent("onreadystatechange", handler);

window.attachEvent("onload”, handler);

}

// Вернуть функцию whenReady

return function whenReady(f) {

if (ready)

f.call(document); // Вызвать функцию, если документ готов

else

funcs.push(f); // Иначе добавить ее в очередь,

} // чтобы вызвать позже.

});

  • Читать дальше
  • 1
  • ...
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: