完全无法在 jQuery 移动设备上延迟加载图像
Completely unable to lazy load images on jQuery Mobile
我目前正在尝试在我的 jQuery 移动网站中使用 Lazy Load XT 插件,以减少加载包含大量图像的页面所需的等待时间。
图片位于“#mainPage”页面,这是我的默认 jQuery 移动页面。
我使用'pageinit'从服务器加载图片插入到页面中,如下图:
$(document).on("pageinit", "#mainPage", function() { loadMain(); // Function retrieves images via ajax & inserts them into the '#main-content' div which is a <div> within '#mainPage'
});
这是我的“#mainPage”页面结构:
<div data-role="page" id="mainPage">
<div data-role="header" data-position="fixed" data-tap-toggle="false">
<h1>Main Page</h1>
</div>
<div data-data-role="main" class="ui-content">
<div class="imagesContent masonry" id="main-content">
</div>
<a class="ui-btn ui-corner-all" href="#" id="more">More</a>
</div>
</div>
这是我用来将图像和相关数据插入“#main-content”的基本过程:
$.post(imagesDataURL, function(imagesData) {
/*
Handled Errors here
*/
$('#main-content').append(imagesData);
hideLoading(); // Hide the Loading spinner
}); // End of $.post
)
但是我的问题是,如果我直接转到 URL:http://foo.com(“#mainPage”是向访问者显示的默认页面,而“#main-content”是a div within '#mainPage'), Lazy Loading XT 插件不起作用并且显示了 none 的图像,但是如果我从任何页面点击进入页面 (#mainPage)该网站,#mainPage 图片延迟加载 完美。
我尝试了'Lazy Load XT'插件作者推荐的基本使用方法,描述如下:
https://github.com/ressio/lazy-load-xt,即把'img'标签的'src'属性改成'data-src'(),没用。
然后我禁用了插件的自动初始化以支持手动初始化,并尝试了:
$(document).on("pageshow", "#mainPage", function() {
$(this).find("img[data-src]").lazyLoadXT();
});
没有用,所以我试了:
$(document).on("pageinit", "#mainPage", function() {
$(this).find("img[data-src]").lazyLoadXT();
});
这也没有用,所以最后我试了:
$(window).on('pageshow', function() {
$(window).lazyLoadXT();
});
以及上述 3 个的各种其他变体,均不成功(当我直接访问“#mainPage”页面时它们不起作用,但当我从另一个页面点击进入“#mainPage”页面时它们确实起作用jQuery 移动页面)。
我真的,真的如果有人能告诉我如何在用户直接访问“#mainPage”页面(而不是懒惰)时让图像延迟加载,我将不胜感激仅在用户点击或从另一个页面点击进入“#mainPage”页面时加载)。
过去 8 个多小时我都在这个问题上没有取得任何进展,现在我完全不知所措。
在您将图像插入页面后立即调用 $(window).lazyLoadXT();
,即在 $('#main-content').append(imagesData);
之后调用 $(window).lazyLoadXT();
。
或者,可以将两个调用合并为一个调用:$('#main-content').append(imagesData).find('img[data-src]').lazyLoadXT();
。
我目前正在尝试在我的 jQuery 移动网站中使用 Lazy Load XT 插件,以减少加载包含大量图像的页面所需的等待时间。
图片位于“#mainPage”页面,这是我的默认 jQuery 移动页面。
我使用'pageinit'从服务器加载图片插入到页面中,如下图:
$(document).on("pageinit", "#mainPage", function() { loadMain(); // Function retrieves images via ajax & inserts them into the '#main-content' div which is a <div> within '#mainPage'
});
这是我的“#mainPage”页面结构:
<div data-role="page" id="mainPage">
<div data-role="header" data-position="fixed" data-tap-toggle="false">
<h1>Main Page</h1>
</div>
<div data-data-role="main" class="ui-content">
<div class="imagesContent masonry" id="main-content">
</div>
<a class="ui-btn ui-corner-all" href="#" id="more">More</a>
</div>
</div>
这是我用来将图像和相关数据插入“#main-content”的基本过程:
$.post(imagesDataURL, function(imagesData) {
/*
Handled Errors here
*/
$('#main-content').append(imagesData);
hideLoading(); // Hide the Loading spinner
}); // End of $.post
)
但是我的问题是,如果我直接转到 URL:http://foo.com(“#mainPage”是向访问者显示的默认页面,而“#main-content”是a div within '#mainPage'), Lazy Loading XT 插件不起作用并且显示了 none 的图像,但是如果我从任何页面点击进入页面 (#mainPage)该网站,#mainPage 图片延迟加载 完美。
我尝试了'Lazy Load XT'插件作者推荐的基本使用方法,描述如下: https://github.com/ressio/lazy-load-xt,即把'img'标签的'src'属性改成'data-src'(),没用。
然后我禁用了插件的自动初始化以支持手动初始化,并尝试了:
$(document).on("pageshow", "#mainPage", function() {
$(this).find("img[data-src]").lazyLoadXT();
});
没有用,所以我试了:
$(document).on("pageinit", "#mainPage", function() {
$(this).find("img[data-src]").lazyLoadXT();
});
这也没有用,所以最后我试了:
$(window).on('pageshow', function() {
$(window).lazyLoadXT();
});
以及上述 3 个的各种其他变体,均不成功(当我直接访问“#mainPage”页面时它们不起作用,但当我从另一个页面点击进入“#mainPage”页面时它们确实起作用jQuery 移动页面)。
我真的,真的如果有人能告诉我如何在用户直接访问“#mainPage”页面(而不是懒惰)时让图像延迟加载,我将不胜感激仅在用户点击或从另一个页面点击进入“#mainPage”页面时加载)。
过去 8 个多小时我都在这个问题上没有取得任何进展,现在我完全不知所措。
在您将图像插入页面后立即调用 $(window).lazyLoadXT();
,即在 $('#main-content').append(imagesData);
之后调用 $(window).lazyLoadXT();
。
或者,可以将两个调用合并为一个调用:$('#main-content').append(imagesData).find('img[data-src]').lazyLoadXT();
。