javascript - jQuery:加载事件无法始终如一地工作
问题描述
我正在尝试使用以下脚本(lazy-load.js)延迟加载图像:
function lazyLoadImage(imgContainers) {
var img = $('<img src="">');
imgContainers.each(function (i, elm) {
img.attr('src', $(elm).data("large"));
img.on('load', function () {
$(this).addClass('loaded');
});
img.addClass('picture');
$(elm).append(img.clone(true));
});
}
$(window).on('load',function () {
var imgContainers = $(document).find(".img-container:not(:has(.loaded))"); // images not loaded yet
lazyLoadImage(imgContainers);
});
问题是,如果我使用标签加载脚本,一切都会顺利,<script></script>
但是当使用 jquery 动态加载脚本时,脚本$.getscript()
无法始终如一地工作(即有时 onload 事件没有触发)。动态加载脚本:
$.getScript( "path/to/lazy-load.js" )
.done(function( script, textStatus ) {
console.log( "script loaded' );
})
.fail(function( jqxhr, settings, exception ) {
console.log( "script not loaded' );
});
那么,为什么脚本不能始终如一地工作?
解决方案
window.load
当窗口完成加载时触发。当您通过 ajax 加载更多内容时,它不会再次触发,因为无法告诉浏览器何时完成加载其他内容。因此,对于您通过 ajax 执行的所有操作,您必须再次执行所有功能。
在你的情况下,我猜你希望这些事情发生:
var imgContainers = $(document).find(".img-container:not(:has(.loaded))"); // images not loaded yet
lazyLoadImage(imgContainers);
所以我想说把它放在一个函数中,当你完成加载脚本时调用它:
function lazyloadimages() {
var imgContainers = $(document).find(".img-container:not(:has(.loaded))"); // images not loaded yet
lazyLoadImage(imgContainers);
}
$(window).on('load',function () {
lazyloadimages(); // notice this change, put the stuff in an extra function so you can reuse it!
});
$.getScript( "path/to/lazy-load.js" )
.done(function( script, textStatus ) {
console.log( "script loaded' );
lazyloadimages();
})
.fail(function( jqxhr, settings, exception ) {
console.log( "script not loaded' );
// oh no something went wrong, no need to lazyload something here!
});
推荐阅读
- flutter - 如何让 Transform.translate 工作 Flutter
- php - 在使用“woe_order_export_started”挂钩时确定 WooCommerce 订单是否包含订单备注
- python - 我有这个 LDA 代码,当我运行它时,我不断收到一个难以跟踪的错误
- r - R 基础,管道,用 max() 总结
- java - Preety - 打印 json 并转换为 pdf
- c# - Visual Studio 和事后调试
- python-3.x - 如何在python中加入带有序列开始到结束的破折号文件
- scanf - 如何使用scanf在单词旁边获得一个int?
- python - 替换一组python文件中的字符串
- python - ValueError:您正在尝试合并 int64 和对象列 Pands Dataframe