js延迟加载的六种方式
JavaScript 实现延迟加载的方法有很多种,以下是六种常见的方式:
- 使用
setTimeout
:
setTimeout(function() {
// 需要延迟执行的代码
}, 3000); // 延迟3秒
- 使用
setInterval
:
var intervalId = setInterval(function() {
// 需要周期性执行的代码
clearInterval(intervalId); // 一旦需求满足或条件达成,清除定时器
}, 3000);
- 动态加载JavaScript文件:
<script>
function loadScript(url, callback){
var script = document.createElement("script");
script.type = "text/javascript";
if(script.readyState){ // 仅限IE
script.onreadystatechange = function(){
if (script.readyState == "loaded" || script.readyState == "complete"){
script.onreadystatechange = null;
callback();
}
};
} else { // 其他浏览器
script.onload = function(){
callback();
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
}
loadScript("file.js", function(){
// 文件加载后执行的代码
});
</script>
- 使用
async
或defer
属性加载外部JavaScript文件:
<script async src="file.js"></script> <!-- 浏览器遇到该标签时,会异步下载并执行,不阻塞DOM渲染 -->
<script defer src="file.js"></script> <!-- 浏览器遇到该标签时,会异步下载,直到DOM解析完成再执行 -->
- 使用
IntersectionObserver
实现懒加载:
var lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));
if ("IntersectionObserver" in window) {
let lazyImageObserver = new IntersectionObserver(function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
let lazyImage = entry.target;
lazyImage.src = lazyImage.dataset.src;
lazyImage.classList.remove("lazy");
lazyImageObserver.unobserve(lazyImage);
}
});
});
lazyImages.forEach(function(lazyImage) {
lazyImageObserver.observe(lazyImage);
});
}
- 使用第三方库(如jQuery的
$.getScript()
,或者L
评论已关闭