Я хочу выполнить некоторый javascript только тогда, когда dom и css будут готовы, но мне все равно на изображение (я склонен лениво загружать изображение)
Я знаю, как определить статус готовности dom, но как определить, что css готов?
Я хочу выполнить некоторый javascript только тогда, когда dom и css будут готовы, но мне все равно на изображение (я склонен лениво загружать изображение)
Я знаю, как определить статус готовности dom, но как определить, что css готов?
Вы должны использовать событие document.ready
. window.onLoad
срабатывает, когда все изображения и другие изображения полностью загружены.
Источник: window.onload против $(document).ready()
У javascript нет возможности определить, загружены ли ваши файлы .css, если вы не загружаете свои файлы css явно с помощью javascript. Вот как я бы сделал последнее:
function dynamicallyLoadCss(fileName,callBackFunc){
var fileRef=document.createElement("link");
fileRef.setAttribute("rel", "stylesheet");
fileRef.setAttribute("type", "text/css");
fileRef.setAttribute("href", filename);
if(callBackFunc) {
callBackFunc();
}
}
//Call the function like so...
dynamicallyLoadCss("mystyles.css", function() {
console.log("Our hamsters have finished loading your mystyles.css file.");
});
Вам нужно что-то вроде ниже. Эта функция выполняется, как только загружается DOM, но не вся страница. Существует большая разница между загрузкой страницы и загрузкой DOM.
$(document).ready(
function(){
alert('DOM is now loaded and can be manipulated .');
}
);
Это будет комбинация использования JS onload И загрузки всего вашего CSS сначала и сверху. Если вы загрузите весь свой CSS до того, как загрузите какой-либо скрипт, вы гарантированно загрузите весь свой CSS; комбинируйте с JS при загрузке, и вы получите то, что ищете.
Загрузите весь CSS в заголовок страницы и перед любым JavaScript.
Также рекомендуется размещать JavaScript внизу страницы непосредственно перед тегом, чтобы обеспечить полную загрузку всех элементов.
$(document).ready(function(){
// now do your actions
});
Люди здесь публикуют много примеров использования функции jQuery DOM ready, но они не упоминают или не демонстрируют что для его использования вам нужно включить jQuery.
Вы можете использовать прямой JavaScript для выполнения того, что хотите, но техника варьируется в зависимости от браузера, и jQuery всегда отлично справляется с нормализацией этих различий по всем направлениям для вас - лично я человек jQuery. Наверное всегда будет :)
В конце <head>
вашего HTML-документа включите библиотеку jQuery, а затем свой код :)
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(function(){
console.log("DOM is Ready! Images haven't finished loading yet!");
});
</script>
Функция jQuery .ready()
используется в нескольких формах. Лично мне вышеописанный метод нравится. Эти двое ниже кажутся наиболее официально оправданными.
$(document).ready(function(){ console.log("DOM Ready!"); });
$(function(){ console.log("DOM Ready!"); });
В документации jQuery по .ready()
говорится следующее:
Хотя JavaScript предоставляет событие загрузки для выполнения кода при отображении страницы, это событие не запускается до тех пор, пока все активы, такие как изображения, не будут полностью получены. В большинстве случаев сценарий можно запустить, как только иерархия DOM будет полностью построена. Обработчик, переданный в .ready(), гарантированно будет выполнен после того, как DOM будет готов, поэтому обычно это лучшее место для подключения всех других обработчиков событий и запуска другого кода jQuery. При использовании скриптов, использующих значения свойств стиля CSS, важно ссылаться на внешние таблицы стилей или внедрять элементы стилей перед тем, как ссылаться на скрипты.
Я выделил для вас эту цитату из документации, поскольку вы упомянули, что хотите, чтобы CSS загружался первым. Судя по всему, вам просто нужно убедиться, что ваши теги <link rel="stylesheet" href="style.css" />
размещены в разделе <head>
над вашим кодом jQuery :)
Удачного кодирования! //Гнаться
Если вы не можете использовать метод $(document).ready, вы можете поместить код сценария прямо перед закрытием тега body.
<body>
html code....
....
<script>
var executeAfterDOMReady;
....
</script>
</body>
Что касается CSS, вы можете вызвать свой файл CSS через jQuery:
$("<link/>", { rel: "stylesheet", type: "text/css", href: "your.css"}).appendTo("head");
Или даже сделать вызов Ajax:
$.ajax({
url:"your.css",
dataType:"script",
success:function(data){
$("head").append("<style>" + data + "</style>");
}
});