当前位置: 首页 > news >正文

JS【详解】 延迟加载

动态创建标签

动态创建的 <script >

let script = document.createElement("script");
script.src = "path/to/script.js";
document.body.appendChild(script);

动态创建的 <img>

let img = new Image();
img.src = 'path/to/image.jpg';
img.onload = function() {// 图片加载完成后执行代码
};

使用 defer 属性

<script> 标签中添加 defer 属性,可以将脚本的执行推迟到文档解析完成后再执行。

<script src="path/to/script.js" defer></script>

使用 async 属性

脚本会在下载完成后立即执行

<script src="path/to/script.js" async></script>

动态加载模块(ES6+)

使用动态 import() 方法来延迟加载模块。

import("path/to/module.js").then((module) => {// 模块加载成功后的处理逻辑}).catch((error) => {// 模块加载失败的处理逻辑});

import() 方法返回一个 Promise,可以使用 then() 方法处理加载成功后的模块,或使用 catch() 方法处理加载失败的情况。

使用 setTimeout 或 setInterval

设置一个定时器,在指定的时间后执行相关代码或加载资源。

setTimeout(function() {// 执行延迟加载的代码或加载资源
}, 2000); // 在 2000 毫秒(2 秒)后执行

使用事件监听器

监听页面滚动、鼠标移动等事件,当事件触发时再执行相关代码或加载资源。

window.addEventListener('scroll', function() {// 执行延迟加载的代码或加载资源
});

使用 Intersection Observer

Intersection Observer API 可以观察元素是否进入视口,并在满足条件时执行相关代码或加载资源。

const observer = new IntersectionObserver(function(entries) {entries.forEach(function(entry) {if (entry.isIntersecting) {// 元素进入视口,执行延迟加载的代码或加载资源observer.unobserve(entry.target); // 停止观察该元素}});
});const targetElement = document.querySelector('.target');
observer.observe(targetElement);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 阿里云服务器 ECS部署jenkins
  • 《企业净零排放实用手册》:助力中小企业实现“双碳”目标
  • 工业智能网关在汽车制造企业的应用价值及功能-天拓四方
  • EVAL长度突破限制
  • Golang 并发编程
  • 【相机与图像】2. 相机内外参的标定的代码示例
  • 中国科技统计年鉴,数据覆盖1991-2022年多年份
  • 基于Python大数据的电商产品评论的情感分析设计与实现,包括lda主题分析和情感分析
  • 面经精选:数据库高频面试十问
  • Python 为Excel单元格设置填充\背景色 (纯色、渐变、图案)
  • 【计算机网络——internet结构和ISP】
  • LVS-NAT + LVS-DR
  • three.js 安装方法、基础简介、创建基础场景
  • RDF引用XML资源的示例
  • linux搭建zabbix
  • 【391天】每日项目总结系列128(2018.03.03)
  • export和import的用法总结
  • java中具有继承关系的类及其对象初始化顺序
  • jdbc就是这么简单
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Tornado学习笔记(1)
  • tweak 支持第三方库
  • 构造函数(constructor)与原型链(prototype)关系
  • 关于Flux,Vuex,Redux的思考
  • 记录:CentOS7.2配置LNMP环境记录
  • 将回调地狱按在地上摩擦的Promise
  • 嵌入式文件系统
  • 悄悄地说一个bug
  • 学习笔记:对象,原型和继承(1)
  • kubernetes资源对象--ingress
  • 如何正确理解,内页权重高于首页?
  • ​Spring Boot 分片上传文件
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (笔记)M1使用hombrew安装qemu
  • (笔试题)合法字符串
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)Linq学习笔记
  • (转)平衡树
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .gitignore文件设置了忽略但不生效
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 药厂业务系统 CPU爆高分析
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET连接MongoDB数据库实例教程
  • .net连接oracle数据库
  • .NET轻量级ORM组件Dapper葵花宝典