网页内容如何懒加载

这篇具有很好参考价值的文章主要介绍了网页内容如何懒加载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

懒加载是一种网页优化技术,可以减少页面初次加载时需要下载的资源量,提高页面加载速度。懒加载的核心思想就是将网页的资源(例如图片、视频等)延迟加载,只有当用户需要滚动页面到该资源的位置时才开始加载。

以下是懒加载的基本实现步骤:

  1. 将需要延迟加载的资源的标签中的 src 属性设置为占位符(例如 data-src)。
  2. 使用 JavaScript 监听页面滚动事件(例如window.onscroll)。
  3. 在用户滚动到资源所在位置时,将该资源的 data-src 属性值赋值给 src 属性,开始加载资源。
  4. 使用 CSS 或 JavaScript 给资源添加 fade-in 效果,提升用户体验。

需要注意的是,在实现懒加载时,需要权衡页面的加载速度和用户用于享受资源的时间,以确保在用户需要资源时加载足够快,同时避免用户太早看到空白页面。

假设有一篇博客页面,页面上包含多张图片,其中有些图片非常大,加载时间较长,影响页面的加载速度和用户体验。这时就可以使用懒加载技术,将这些图片的src属性设置为占位符,只有当用户滚动到图片位置时才开始加载真实的图片资源。

懒加载的基本实现

示例代码如下:

HTML代码:

<img class="lazy" data-src="image.jpg" src="placeholder.jpg">
<img class="lazy" data-src="image2.jpg" src="placeholder.jpg">

CSS代码:

.lazy {
    opacity: 0; /* 初始时不可见 */
    transition: opacity 0.3s ease-in-out;
}

JavaScript代码:

(function() {
    var lazyLoadImages = function() {
        var lazyImages = document.querySelectorAll('.lazy');
        lazyImages.forEach(function(img) {
            if (img.getBoundingClientRect().top <= window.innerHeight && img.getBoundingClientRect().bottom >= 0) {
                img.src = img.dataset.src;
                img.classList.add('fade-in');
                img.classList.remove('lazy');
            }
        });
    }
    lazyLoadImages(); // 初始化页面时加载可见区域内的图片
    window.addEventListener('scroll', lazyLoadImages); // 监听页面滚动事件
})();

在上述代码中,图片的占位符使用了相同的src属性值placeholder.jpg,真实的图片资源使用了data-src属性来指定,JavaScript代码监听了scroll事件,一旦某个图片所在位置滚动到可视区域时,就将该图片的data-src属性值赋值给它的src属性,让它开始加载真实的图片资源,并添加了fade-in效果,提升用户体验。

图片是动态数据

如果图片是动态数据,并且需要通过 AJAX 或其他异步方式获取,那么可以按照以下方式实现懒加载。

  1. 首先,为需要懒加载的图片添加占位符,和前面的例子一样。
<img class="lazy" data-src="image.jpg" src="placeholder.jpg">
  1. 在页面初始化时,不需要为图片设置 src 属性,只为它们提供 data-src 属性值。然后在完成异步请求之后,将每个图片的
    data-src 属性值设置为真实的资源 URL 。
var image = new Image();
image.onload = function() {
    // 异步请求完成,并获取到图片 URL
    var url = 'image.jpg';
    // 将图片的占位符的 data-src 属性设置为真实的资源 URL
    var img = document.querySelector('.lazy');
    img.setAttribute('data-src', url);
};
image.src = 'image.jpg';
  1. 最后,使用 JavaScript 监听页面滚动事件,当用户滚动到图片的位置时,将该图片的 data-src 属性值赋值给它的 src
    属性,让它开始加载真实的图片资源。
(function() {
    var lazyLoadImages = function() {
        var lazyImages = document.querySelectorAll('.lazy');
        lazyImages.forEach(function(img) {
            if (img.getBoundingClientRect().top <= window.innerHeight && img.getBoundingClientRect().bottom >= 0 && !img.src) {
                img.src = img.dataset.src;
                img.classList.add('fade-in');
                img.classList.remove('lazy');
            }
        });
    }
    lazyLoadImages(); // 初始化页面时加载可见区域内的图片
    window.addEventListener('scroll', lazyLoadImages); // 监听页面滚动事件
})();

在上述代码中,当当前图片的src属性未被设置时,才将图片的data-src属性值赋值给它的src属性,避免重复加载图片。

懒加载图片的完整示例

以下是一个懒加载图片的完整示例 HTML 代码:

<!DOCTYPE html>
<html>
<head>
    <title>懒加载示例</title>
    <style>
        .lazy {
            opacity: 0;
            transition: opacity 0.3s ease-in-out;
        }
    </style>
</head>
<body>

    <h1>懒加载示例</h1>

    <img class="lazy" data-src="https://www.example.com/image1.jpg" src="https://www.example.com/placeholder.jpg">
    <img class="lazy" data-src="https://www.example.com/image2.jpg" src="https://www.example.com/placeholder.jpg">
    <img class="lazy" data-src="https://www.example.com/image3.jpg" src="https://www.example.com/placeholder.jpg">
    <img class="lazy" data-src="https://www.example.com/image4.jpg" src="https://www.example.com/placeholder.jpg">

    <script>
        (function() {
            var lazyLoadImages = function() {
                var lazyImages = document.querySelectorAll('.lazy');
                lazyImages.forEach(function(img) {
                    if (img.getBoundingClientRect().top <= window.innerHeight && img.getBoundingClientRect().bottom >= 0 && !img.src) {
                        img.src = img.dataset.src;
                        img.classList.add('fade-in');
                        img.classList.remove('lazy');
                    }
                });
            }
            lazyLoadImages(); // 初始化页面时加载可见区域内的图片
            window.addEventListener('scroll', lazyLoadImages); // 监听页面滚动事件
        })();
    </script>
</body>
</html>

在上面的代码中,图片的占位符使用了相同的 src 属性值 https://www.example.com/placeholder.jpg,在需要懒加载的图片中使用 data-src 属性指定真实的图片资源地址。JavaScript 代码中监听了scroll事件,并在图片进入可视区域时将占位符的 src 属性设置为真实的资源地址,同时添加了 fade-in 效果。

长表格的懒加载

长表格的懒加载需要满足以下两个需求:

仅在表格的当前视窗范围内显示数据,避免整个表格的一次性加载;
滚动表格时,自动加载新的数据,并移除视窗范围之外的旧数据。
以下是一个基于 jQuery 的表格懒加载示例:

HTML:

<table class="table">
  <thead>
    <tr>
      <th>ID</th>
      <th>名称</th>
      <th>价格</th>
    </tr>
  </thead>
  <tbody>
    <!-- 表格内容为空 -->
  </tbody>
</table>

CSS:

.table {
    height: 400px;
    overflow-y: scroll;
    border-collapse: collapse;
    width: 100%;
}
td, th {
    padding: 8px;
    border: 1px solid #ddd;
    text-align: left;
}

JavaScript:

$(document).ready(function() {
    var table = $('.table');
    var tbody = table.find('tbody');
    var rows = [];
    // 模拟数据
    for (var i = 1; i <= 1000; i++) {
        rows.push({
            id: i,
            name: '商品 ' + i,
            price: '$' + (Math.random() * 100).toFixed(2)
        });
    }
    // 计算每行的高度
    var rowHeight = tbody.find('tr:first-child').outerHeight();
    var visibleRowsCount = Math.ceil(table.height() / rowHeight);
    var loadedRowsCount = 0;
    var totalRowsCount = rows.length;
    // 滚动事件处理
    table.on('scroll', function() {
        var scrollTop = table.scrollTop();
        var startIdx = Math.floor(scrollTop / rowHeight) - visibleRowsCount;
        var endIdx = startIdx + visibleRowsCount * 2;
        if (startIdx < 0) startIdx = 0;
        if (endIdx >= totalRowsCount) endIdx = totalRowsCount - 1;
        addRows(startIdx, endIdx);
        removeRows(startIdx, endIdx);
    });
    // 添加行到表格
    function addRows(fromIdx, toIdx) {
        if (loadedRowsCount >= totalRowsCount) return;
        if (toIdx >= totalRowsCount) {
            toIdx = totalRowsCount - 1;
        }
        for (var i = fromIdx; i <= toIdx; i++) {
            if (rows[i]) {
                var tr = $('<tr>');
                tr.append($('<td>').text(rows[i].id));
                tr.append($('<td>').text(rows[i].name));
                tr.append($('<td>').text(rows[i].price));
                tbody.append(tr);
                loadedRowsCount++;
            }
        }
    }
    // 移除过时的行
    function removeRows(fromIdx, toIdx) {
        if (loadedRowsCount <= visibleRowsCount * 3) return;
        if (fromIdx > visibleRowsCount) {
            tbody.find('tr:lt(' + (fromIdx - visibleRowsCount) + ')').remove();
            loadedRowsCount -= (fromIdx - visibleRowsCount);
        }
        if (toIdx < (totalRowsCount - visibleRowsCount * 2)) {
            tbody.find('tr:gt(' + (toIdx - visibleRowsCount * 2) + ')').remove();
            loadedRowsCount -= (totalRowsCount - visibleRowsCount * 2 - toIdx);
        }
    }
    // 初始化表格
    addRows(0, visibleRowsCount * 3 - 1);
});

在上述代码中,我们通过以下步骤实现了懒加载表格的功能:

  1. 计算表格的每行高度、可见行数等参数;
  2. 使用模拟数据初始化表格,实现懒加载;
  3. 监听表格的滚动事件,实现滚动加载和移除过时行的功能。

在滚动事件处理函数中,我们计算出当前视窗范围内的数据索引,并通过 addRows 和 removeRows 函数来实现只加载当前视窗范围内的数据,并移除视窗范围之外的旧数据。

vue中懒加载

在 Vue 中,懒加载可以应用于图片、组件、路由等方面。下面分别介绍各种情况下的实现方法。

  1. 图片懒加载

使用 vue-lazyload 插件可以方便地实现图片的懒加载。它提供了一个 v-lazy 指令,只有当图片进入可视区域时才开始加载。

以下是一个使用 vue-lazyload 插件的简单示例:

<template>
  <div>
    <img v-lazy="imageUrl">
  </div>
</template>

<script>
import VueLazyload from 'vue-lazyload';

export default {
  data() {
    return {
      imageUrl: 'placeholder.png'
    };
  },
  created() {
    this.imageUrl = 'http://example.com/image.jpg'; // 真实图片地址
  },
  directives: {
    lazyload: VueLazyload.directive
  }
}
</script>

使用 v-lazy 指令将图片的 src 属性设置为占位符(例如 placeholder.png),然后将真实图片地址赋值给 imageUrl 变量,当图片进入可视范围时,vue-lazyload 插件会自动将 imageUrl 对应的图片加载进来。

有关 vue-lazyload 的更多用法,请参考官方文档。

  1. 组件懒加载

在 Vue 中,可以使用异步组件实现组件的懒加载。异步组件使用 import() 动态导入组件定义,只有在需要使用组件时才会加载。

以下是一个使用异步组件实现懒加载的示例:

<template>
  <div>
    <button @click="loadComponent">加载组件</button>
    <component v-if="loaded" :is="component"></component>
  </div>
</template>

<script>
export default {
  data() {
    return {
      loaded: false,
      component: null
    };
  },
  methods: {
    loadComponent() {
      import('@/components/SomeComponent.vue').then(component => {
        this.loaded = true;
        this.component = component.default;
      });
    }
  }
}
</script>

在上述示例中,通过 import() 函数异步加载组件 SomeComponent.vue,将组件定义赋值给 component 变量,并将 loaded 变量设置为 true,在模板中使用动态组件将组件定义渲染为实例。

  1. 路由懒加载

在路由中使用动态导入(Dynamic Import)可以实现路由的懒加载。动态导入是 ECMAScript6 中的语法,使用 import() 函数动态加载路由定义,只有在需要使用路由时才会加载。

以下是一个使用动态导入实现路由懒加载的示例:

const routes = [
  {
    path: '/home',
    name: 'home',
    component: () => import('@/views/Home.vue')
  },
  {
    path: '/about',
    name: 'about',
    component: () => import('@/views/About.vue')
  }
];

在上述示例中,使用 import() 函数动态导入路由组件,将组件定义作为 component 属性的值。当路由被访问时,路由组件会按需加载。

需要注意的是,使用动态导入后,路由组件不会在打包时被包含在主 bundle 中,而是会被打包成单独的 chunk。这样可以实现更快的页面加载速度和更小的代码体积。文章来源地址https://www.toymoban.com/news/detail-763902.html

到了这里,关于网页内容如何懒加载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 假期学习资源:WEB网页网站开发入门基础课

    HTML入门到精通视频教程免费下载  链接: https://pan.baidu.com/s/1NyBZOgy6Iyolo2qXL819vg?pwd=adfc 提取码: adfc HTML5基础知识教程视频教程免费下载 链接: https://pan.baidu.com/s/129pvlmnYdMyT9FhWd14KEw?pwd=icbv 提取码: icbv CSS零基础入门到精通视频教程免费下载  链接: https://pan.baidu.com/s/1VbZONTL9Ez-ZDyZnC

    2024年02月13日
    浏览(41)
  • 前端开发网站推荐

    以下是一些可以用来查找和比较前端框架的推荐网站: JavaScript框架比较: 这些网站提供了对不同JavaScript框架和库的详细比较和评估。 JavaScripting: 提供了大量的JavaScript库和框架,以及它们的星级、更新频率等信息。 Libraries.io: 可以查找各种编程语言的开源库和框架,并查看

    2024年02月07日
    浏览(43)
  • Web大学生网页作业成品 bootstrap响应式网站开发 基于HTML+CSS+JS+Bootstrap制作火锅美食网站(4页)

    🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (1000套) 】 🧡 程序员有趣的告白方式:【💌HTML七夕情人节表白网页制作

    2024年02月08日
    浏览(55)
  • h5网站开发,页面加载wow.js动画时,出现了左右滚动条,怎么解决?

    如下图所示,页面在加载WOW动画时出现了左右滚动条: 使用CSS样式来隐藏滚动条 在CSS文件中添加以下样式:

    2024年02月10日
    浏览(39)
  • Wordpress网站开发问题解决——除了主页之外的所有页面都是“找不到页面内容”(修复记录)

    最近 阿里云老是提醒我边缘计算机控制升级 我自己建立了一个网站,用的就是阿里云的万网服务器 所以 我去看看 结果跟我没什么关系 本以为就这么愉快地结束了 没想到 我建立的网站就只能打开主页 其他页面都是 “找不到页面内容” 空白页面 糟糕 我不是专业的网站开发

    2024年01月24日
    浏览(55)
  • 用asp.net开发h5网页版视频播放网站,类似优酷,jellyfin,emby

            之前用jellyfin开源软件搞了一个视频播放服务器,用来共享给家里人看电影和电视剧,jellyfin虽然各方面功能都很强大,但是界面和使用习惯都很不适合,于是就想着利用下班休息时间做一套自己喜欢的视频网站出来.         本来是打算直接用jellyfin的源码进行修改,源

    2024年02月15日
    浏览(57)
  • h5开发网站-使用jquery来实现二层嵌套的左侧列表,点击后显示右侧内容的效果

    使用jquery来实现二层嵌套的左侧列表,点击后显示右侧内容的效果。 为一级列表项和二级子列表项分别添加了点击事件处理程序。 当一级列表项被点击时,使用.slideToggle()方法展开或收起对应的二级子列表项。 当二级子列表项被点击时,使用event.stopPropagation()方法阻止事件冒

    2024年02月09日
    浏览(41)
  • 个人网站制作 Part 3 用JS添加高级交互(表单验证、动态内容更新) | Web开发项目

    欢迎回到基础Web开发练手项目系列! 在前两篇博文中,我们创建了个人网站的基本结构、样式、导航栏、项目展示、联系信息、表单交互和动画效果。 本篇将继续丰富你的网站,为其添加更高级的交互性功能,使用JavaScript进行操作。 🔨表单验证 🔧步骤 1: 添加JavaScript文件

    2024年02月01日
    浏览(45)
  • PHP 房产网站系统Dreamweaver开发mysql数据库web结构php编程计算机网页项目

    一、源码特点     PHP 房产网站系统是一套完善的WEB设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 源码 https://download.csdn.net/download/qq_41221322/88233553 论文 https://download.csdn.net/download/qq_41221322/88233555 PHP 房产网站系统Drea

    2024年02月12日
    浏览(57)
  • 20个优秀免费开源的WEB前端UI框架提高网站开发效率

    最近准备学习一下前端UI我也是在网上找了很久最终整理出来了20个不错的前端UI框架网站,大家都知道很多成熟的前端框架可以直接引,学习框架可以提升我们网站的开发速度。有些大型公司的前端或者后端框架都是用自己开发的,对于大部分用户和公司来讲,我们可以用开

    2024年02月06日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包