Есть ли способ определить, когда страница завершила загрузку, то есть все ее содержимое, javascript и активы, такие как CSS и изображения?
так нравится:
if(PAGE HAS FINISHED LOADING)
{
// do something amazing
}
а также дополнительно, если страница загружалась более 1 минуты, сделайте что-нибудь еще, например:
if(PAGE HAS BEEN LOADING FOR 1 MIN)
{
// do something else amazing
}
Я видел, как веб-сайты, такие как MobileMe от Apple, выполняли аналогичные проверки, но не мог понять это в своих огромных библиотеках кода.
Кто-нибудь может помочь?
Благодарность
РЕДАКТИРОВАТЬ: Это, по сути, то, что я хочу сделать:
// hide content
$("#hide").hide();
// hide loading
$("#loading").hide();
// fade in loading animation
setTimeout($('#loading').fadeIn(), 200);
jQuery(window).load(function() {
$("#hide").fadeIn();
$("#loading").fadeOut(function() {
$(this).remove();
clearInterval(loadingAnim);
});
setTimeout(function() {
$("#error").fadeIn();
}, 60000);
});
window.onload
(или$(window).load()
) не работает?Ответы:
jQuery(window).load(function () { alert('page is loaded'); setTimeout(function () { alert('page is loaded and 1 minute has passed'); }, 60000); });
Или http://jsfiddle.net/tangibleJ/fLLrs/1/
См. Также http://api.jquery.com/load-event/ для объяснения jQuery (window) .load.
Обновить
Подробное объяснение того, как работает загрузка javascript и два события DOMContentLoaded и OnLoad, можно найти на этой странице .
DOMContentLoaded : когда DOM готов к манипулированию. Способ jQuery захвата этого события - с помощью
jQuery(document).ready(function () {});
.OnLoad : когда модель DOM готова и все ресурсы, включая изображения, iframe, шрифты и т. Д. , Загружены, а класс «Вращающееся колесо / час» исчезает. Способ jQuery захвата этого события описан выше
jQuery(window).load
.источник
jQuery.load()
это устарело с jQuery / 1.8 и удалено в jQuery / 3. Текущий синтаксисjQuery(window).on("load", function(){/*...*/});
.в jquery есть два способа сделать это в зависимости от того, что вы ищете.
используя jquery, вы можете сделать
// это будет ждать загрузки текстовых ресурсов перед вызовом this (dom .. css .. js)
$(document).ready(function(){...});
// это будет ждать завершения загрузки всех изображений и текстовых ресурсов перед выполнением
$(window).load(function(){...});
источник
Это называется onload. Готовность к модели DOM была фактически создана по той причине, по которой onload ожидал изображений. (Ответ, полученный от Матчу на аналогичный вопрос некоторое время назад.)
window.onload = function () { alert("It's loaded!") }
onload ожидает всех ресурсов, которые являются частью документа.
Ссылка на вопрос, где он все объяснил:
Нажми меня, ты знаешь, что хочешь!
источник
Я думаю, что проще всего было бы
var items = $('img, style, ...'), itemslen = items.length; items.bind('load', function(){ itemslen--; if (!itemlen) // Do stuff here });
ИЗМЕНИТЬ, чтобы быть немного сумасшедшим:
var items = $('a, abbr, acronym, address, applet, area, audio, b, base, ' + 'basefont, bdo, bgsound, big, body, blockquote, br, button, canvas, ' + 'caption, center, cite, code, col, colgroup, comment, custom, dd, del, ' + 'dfn, dir, div, dl, document, dt, em, embed, fieldset, font, form, frame, ' + 'frameset, head, hn, hr, html, i, iframe, img, input, ins, isindex, kbd, ' + 'label, legend, li, link, listing, map, marquee, media, menu, meta, ' + 'nextid, nobr, noframes, noscript, object, ol, optgroup, option, p, ' + 'param, plaintext, pre, q, rt, ruby, s, samp, script, select, small, ' + 'source, span, strike, strong, style, sub, sup, table, tbody, td, ' + 'textarea, tfoot, th, thead, title, tr, tt, u, ul, var, wbr, video, ' + 'window, xmp'), itemslen = items.length; items.bind('load', function(){ itemslen--; if (!itemlen) // Do stuff here });
источник
Другой вариант вы можете проверить document.readyState, например,
var chkReadyState = setInterval(function() { if (document.readyState == "complete") { // clear the interval clearInterval(chkReadyState); // finally your page is loaded. } }, 100);
Из документации страницы readyState краткое изложение полного состояния
источник
$(window).on("load" function () {//dostuff})
...?Один из вариантов - оставить страницу пустой, содержащей небольшое количество javascript. Используйте сценарий, чтобы сделать вызов AJAX, чтобы получить фактическое содержимое страницы, и пусть функция успеха записывает результат поверх текущего документа. В функции тайм-аута вы можете «сделать еще что-нибудь потрясающее»
Примерный псевдокод:
$(document).ready(function(){ $.ajax url of actual page success:do something amazing timeout: do something else });
источник
Вы это имели в виду?
$("document").ready( function() { // do your stuff }
источник
var pageLoaded=0; $(document).ready(function(){ pageLoaded=1; });
Использование jquery: https://learn.jquery.com/using-jquery-core/document-ready/
источник
Без jquery или чего-то подобного, почему бы и нет?
var loaded=0; var loaded1min=0; document.addEventListener("DOMContentLoaded", function(event) { loaded=1; setTimeout(function () { loaded1min=1; }, 60000); });
источник
jquery
работает.DOMContentLoaded
запускается только после загрузки внешнего контента (особенно изображений, что может занять много времени в определенных условиях).jquery
выполняется.ready()
с использованием определенных событий браузера, которые (в большинстве браузеров) происходят до загрузки внешнего содержимого.К вашему сведению людей, которые спрашивали в комментариях, это то, что я фактически использовал в проектах:
function onLoad(loading, loaded) { if(document.readyState === 'complete'){ return loaded(); } loading(); if (window.addEventListener) { window.addEventListener('load', loaded, false); } else if (window.attachEvent) { window.attachEvent('onload', loaded); } }; onLoad(function(){ console.log('I am waiting for the page to be loaded'); }, function(){ console.log('The page is loaded'); });
источник