基于dataset的使用和图片延时加载的实现方法

为了给你更全面的介绍,我将分为两部分来解答你的问题。

基于 dataset 的使用

dataset是HTML5中新增的一个属性,用于为元素存储自定义数据。它可以为我们提供一种方便快捷的方式来访问元素存储的数据,而不需要通过其他的方式来操作元素的属性。

增加数据

<body>
  <div data-name="zhangsan" data-age="18"></div>
</body>

在上述HTML代码中,我们使用data-前缀来为div元素增加数据。其中,data-name存储的是张三的名字,data-age存储的是张三的年龄。

获取数据

我们可以使用HTMLElement.dataset来获取元素的自定义数据。

const div = document.querySelector('div');
const name = div.dataset.name;
const age = div.dataset.age;
console.log(name); // 'zhangsan'
console.log(age); // '18'

使用HTMLElement.dataset可以获取到元素的所有自定义数据,返回的是一个以data-前缀去掉的名称作为属性名的对象。另外,我们在获取数据的时候可以使用驼峰式的写法来获取元素的自定义数据。

示例说明

我们想要在页面中显示一组学生的信息。这里我们可以将每个学生的信息存储在一个div元素中,并使用dataset来管理每个学生的数据。

<body>
  <div class="student-info" data-name="zhangsan" data-age="18" data-gender="male"></div>
  <div class="student-info" data-name="lisi" data-age="19" data-gender="female"></div>
  <div class="student-info" data-name="wangwu" data-age="20" data-gender="male"></div>
</body>

为了在页面上显示学生的信息,我们可以使用以下代码。

const studentInfoList = document.querySelectorAll('.student-info');
studentInfoList.forEach(studentInfo => {
  const name = studentInfo.dataset.name;
  const age = studentInfo.dataset.age;
  const gender = studentInfo.dataset.gender;
  console.log(name, age, gender);
  // 'zhangsan' '18' 'male'
  // 'lisi' '19' 'female'
  // 'wangwu' '20' 'male'
});

图片延时加载的实现方法

当网页中包含大量的图片时,加载的速度会变得很慢,这时可以使用图片延时加载的方式来提升网页的性能和用户的体验。

延时加载技巧的原理是,当浏览器处理到图片时,如果图片未在视口中出现,则不加载图片,待图片进入视口后再进行加载。

实现方法

1. 增加占位符

在图片加载之前,可以先为占位符增加一个img元素,并设置它的宽度、高度、背景色等样式,以使得页面在没有加载图片时也不会出现样式上的错乱。

<img class="lazy-img" data-src="real-image.jpg" src="placeholder.jpg" width="400" height="400" />

上述代码中同时设置了一个data-src属性,用于存储真实图片的地址,src属性则用来占位。

2. 监听视口的滚动事件

监听窗口的滚动事件,当滚动到图片的位置时,进行加载操作。

const lazyImgList = document.querySelectorAll('.lazy-img');
lazyImgList.forEach(lazyImg => {
  const observer = new IntersectionObserver(entries => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        const realImgSrc = lazyImg.dataset.src;
        lazyImg.setAttribute('src', realImgSrc);
        observer.unobserve(lazyImg);
      }
    });
  });
  observer.observe(lazyImg);
});

上述代码中使用了IntersectionObserverAPI来监听元素是否进入视口,当元素进入视口时,进行图片的真实地址和src属性的更新,并停止对元素的观察。

示例说明

下面示例中,我们实现了一个简单的图片延时加载的例子。其中,图片的真实地址存储在data-src属性中,并使用IntersectionObserverAPI来监听图片是否进入视口。

<body>
  <img class="lazy-img" data-src="https://picsum.photos/id/1082/800/800" src="https://via.placeholder.com/800" width="400" height="400" />
  <img class="lazy-img" data-src="https://picsum.photos/id/1069/800/800" src="https://via.placeholder.com/800" width="400" height="400" />
  <img class="lazy-img" data-src="https://picsum.photos/id/870/800/800" src="https://via.placeholder.com/800" width="400" height="400" />
</body>
const lazyImgList = document.querySelectorAll('.lazy-img');
lazyImgList.forEach(lazyImg => {
  const observer = new IntersectionObserver(entries => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        const realImgSrc = lazyImg.dataset.src;
        lazyImg.setAttribute('src', realImgSrc);
        observer.unobserve(lazyImg);
      }
    });
  });
  observer.observe(lazyImg);
});

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于dataset的使用和图片延时加载的实现方法 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • jQuery的DOM操作之删除节点示例

    下面是jQuery的DOM操作之删除节点示例的完整攻略。 一、为什么需要删除节点 Web页面通常需要根据真实情景来动态地添加或删除元素,以此来实现一些交互效果或动态展示数据,而jQuery框架中封装了大量的DOM操作方法,使得我们可以更加轻松地完成与页面元素有关的各种操作。 在页面制作中,有时候要动态的删除网页中的某些元素节点,例如通过ajax技术从服务器获…

    JavaScript 2023年6月10日
    00
  • JavaScript 学习笔记(十四) 正则表达式

    JavaScript 学习笔记(十四) 正则表达式 什么是正则表达式 正则表达式是一种可以匹配文本片段的模式,它是由一个或多个字符和元字符组成的。在 JavaScript 中,正则表达式是由 RegExp 对象表示的。 正则表达式语法 元字符 元字符是正则表达式中具有特殊意义的字符,包括以下元字符: . : 匹配除 \n 外的任意字符。 [] : 匹配括号内…

    JavaScript 2023年5月28日
    00
  • NodeJS有难度的面试题(能答对几个)

    下面我会详细讲解一下 “NodeJS有难度的面试题(能答对几个)” 的完整攻略。 1. Node.js的基础知识 在面试过程中,面试官通常会问到一些基础的 Node.js 知识,例如: Node.js 是什么? npm 是什么? 有什么用? 如何在 Node.js 中使用第三方模块? 什么是模块? 如何定义并导入模块? 针对这些问题,你需要先通过自学文档以及…

    JavaScript 2023年5月28日
    00
  • javascript 通用loading动画效果实例代码

    对于这个问题,我可以提供以下完整攻略: JavaScript 通用 Loading 动画效果实例代码 什么是 Loading 动画 Loading 动画指的是在某些长时间操作(例如网络请求或计算)期间,为了让用户知道应用程序正在运行中,而在屏幕上呈现的动画效果。通常采用旋转、脉冲或进度条等形式。 如何实现 Loading 动画 HTML & CSS …

    JavaScript 2023年6月10日
    00
  • express项目的创建

    前言 前端开发者若要进行后端开发,大多都会选择node.js,在node生态下是有大量框架的,其中最受新手喜爱的便是老牌的express.js,接下来我们就从零创建一个express项目。 安装node 在这里:https://nodejs.org/dist/v16.14.0/node-v16.14.0-x64.msi ,下载后直接安装。 安装完成后,验证是…

    JavaScript 2023年4月17日
    00
  • js防抖-节流函数的基本实现和补充详解

    JS防抖和节流函数的基本实现和补充详解 在Web应用中,为了提升用户体验及减轻服务器压力,我们通常会使用JS防抖和节流函数来控制代码执行的频率及节约资源的使用。本文将对JS防抖和节流函数的基本实现进行详细的讲解,同时也会补充一些重要的知识点。 JS防抖函数的基本实现 JS防抖函数的原理是将多次触发的事件合并为一次触发,从而减少触发事件的次数,提高代码性能。比…

    JavaScript 2023年6月11日
    00
  • js播放wav文件(源码)

    下面是使用JavaScript播放WAV文件的攻略及示例: 前置条件 播放WAV文件需要浏览器支持Web Audio API,因此在进行下一步操作的前提条件是您的浏览器支持Web Audio API。 步骤一:创建一个AudioContext对象 在使用Web Audio API播放声音之前,必须先创建一个AudioContext对象。代码如下: let c…

    JavaScript 2023年5月27日
    00
  • JavaScript创建数组的方法详解

    JavaScript创建数组的方法详解 在JavaScript中创建数组的方法有很多,本文将详细讲解其中的6种方法。 1. 直接量 使用直接量的方式可以快速创建一个数组,只需要使用方括号[],并在其中用逗号隔开各元素。示例如下: let arr1 = [1, 2, 3]; 2. 使用new Array() 使用new Array()的方式也可以创建一个数组,…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部