Как вызвать функцию после готовности документа и загрузки изображения?
я использовал что-то вроде этого:
$(document).ready(function() {
$('#my-img').load(function() {
// do something
});
});
но иногда он не может выполнить второй обратный вызов (без каких-либо ошибок, поэтому там нечего делать), и я думаю, что, возможно, изображение загружается до того, как документ будет готов.
Если я не использую $(документ).готовая () часть, она отлично работает, поэтому я думаю, что пока оставлю это так. Но кто-то сказал мне, что это хорошая практика всегда делать такие вещи в качестве обратного вызова документ готов, потому что документ может быть не готов. Это правда?
какие мысли?
2 ответов
взято с документация по load ()
предостережения события load при использовании с изображениями
общая задача разработчики пытаются решить с помощью .нагрузка() ярлык предназначен для выполнения функции, когда изображение (или коллекция изображения) полностью загружены. Есть несколько известных предостережений с это следует отметить. Это:
Он не работает последовательно и надежно кросс-браузер
он не срабатывает правильно в WebKit, если образ src установлен в тот же src, что и раньше
это не правильно пузырь вверх по дереву DOM
****не может прекратить огонь для изображений, которые уже живут в кэше браузера****
особенно последнее является общей проблемой.
вы можете попробовать imagesLoaded плагин, но мне больше повезло со следующим подходом:
var element = $('#my-img');
$("<img/>").load(function () { //create in memory image, and bind the load event
//do something
//var imageHeight = this.height;
}).attr("src", element.attr("src"));
//set the src of the in memory copy after binding the load event, to avoid WebKit issues
это грязно, но если вам действительно нужно выполнить какое-то действие после загрузки изображения, это был единственный надежный подход, который я смог заставить работать.
старый вопрос, но может быть полезен гуглерам: Если вам нужен код для выполнения после загрузки изображений, и изображения находятся в DOM, вы должны использовать $(window).загрузить вместо $(document).готовый. Как в:
$(window).load(function() {
console.log("My image is " + $('#my-img').width() + " pixels wide.");
// You may not have known this before the image had loaded
});
это жизненно важно, если вы делаете какие-либо jiggerypokery с SVGs или другими встроенными документами.