首页 > 其他分享 >js 手写图片懒加载插件

js 手写图片懒加载插件

时间:2024-08-21 21:23:06浏览次数:12  
标签:el 插件 Vue app js import 手写

一、目标

模仿vue-lazyload插件

只需将img标签的src属性名替换为自定义属性v-lazy,即可实现图片懒加载功能

例如:

二、实现

不清楚图片懒加载原理的参考我的上一篇博客

1.封装自定义插件:暴露一个对象,包含一个install方法

先介绍一下自定义插件使用方法和通用写法:

// main.js
import createApp from 'vue';
import App from './App.vue';
import MyPlugin from './myPlugin ';

const app = createApp(App);

// 使用插件 传入一个对象作为配置项
app.use(MyPlugin, {
  myProperty: 'some value'
});

app.mount('#app');
// myPlugin.js
export default {
  // 插件安装时调用 接收参数:Vue实例对象和配置项
  install(Vue, options) {
    // 添加全局指令
    Vue.directive('my-directive', {
      bind(el, binding) {
        // 指令逻辑
      }
      // 可以添加更多的钩子函数,如 inserted, update, componentUpdated 和 unbind
    });

    // 添加全局方法
    Vue.prototype.$myMethod = function() {
      // 方法逻辑
    };

    // 添加全局属性
    Vue.prototype.$myProperty = options.myProperty 
  }
};

2.利用交叉观察器Intersection Observer实现图片懒加载

  main.js引入插件

// main.js
import createApp from 'vue';
import App from './App.vue';
import lazyPlugin from './lazyPlugin';

const app = createApp(App);

// 使用插件 传入一个对象作为配置项
app.use(lazyPlugin);

app.mount('#app');

  定义插件,编写install函数       

//lazyPlugin.js
export default {
  install(Vue){
    //自定义指令(指令名,回调函数)
    //回调函数包含参数 el:绑定该指令的DOM元素(img元素) | binding:属性值(img的url)
    Vue.directive('lazy',(el,binding)=>{
      //编写回调函数 接收参数entries:被观察元素组成的数组 
      const callback = (entries)=>{
        entries.forEach(entry=>{
          //若与视口发生交叉  
          if(entry.isIntersecting){
            el.src = binding.value;
            observer.unobserve(el);
          }
        })
      }
      //构造观察器  
      const observer = new IntersectionObserver(callback)
      observer.observe(el);
    })
    
  }
}

标签:el,插件,Vue,app,js,import,手写
From: https://blog.csdn.net/m0_75276704/article/details/141369331

相关文章

  • 跨域、JSONP、CORS、Spring、Spring Security解决方案
    概述JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。跨域是浏览器(如Chrome浏览器基于JSV8引擎,可以简单理解为JS解释器)的一种同源安全策略,是浏览器单方面限制脚本的跨域访问。因此,仅有客户端运行在浏览器时才存在跨域问题,才需要考虑如何解决这个问题。浏览器控制台......
  • 【Three.JS零基础入门教程】第七篇:材质详解
      前期回顾:【Three.JS零基础入门教程】第一篇:搭建开发环境【Three.JS零基础入门教程】第二篇:起步案例【Three.JS零基础入门教程】第三篇:开发辅助【Three.JS零基础入门教程】第四篇:基础变换【Three.JS零基础入门教程】第五篇:项目规划【Three.JS零基础入门教程】第六篇:物......
  • 网络增加安全策略,兼容模式下打不开网页的问题,用到了js中的获取时间
    1、遇到了403的问题,查到原因是因为要url转义,可是转义后,发现极速模式可以用,兼容模式依然是403的问题。所以认为兼容模式与极速模式的解析url中存在很大差异,通过比较兼容模式与极速模式的url,发现兼容模式有中文字符,极速模式下是转义的,所以将中文字符换成英文,发现可以打开链接了。......
  • 基于nodejs+vue协同过滤算法的音乐推荐系统 [程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,数字音乐已成为人们日常生活中不可或缺的一部分。面对海量的音乐资源,用户往往难以快速找到符合个人喜好的音乐作品。传统的音乐搜......
  • 基于nodejs+vue农村医保信息系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着我国农村经济的快速发展和人民生活水平的提高,农村医疗保障体系的建设日益受到重视。然而,传统的农村医保管理方式存在信息孤岛、流程繁琐、效率低下等问......
  • 基于nodejs+vue农村商业银行贷款交易处理系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着农村经济的蓬勃发展,农村商业银行在支持农业、农村和农民发展方面扮演着至关重要的角色。然而,传统的贷款交易处理流程往往存在效率低下、信息不对称、风......
  • 基于nodejs+vue面向爱宠人群的宠物资讯系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着社会经济的快速发展与居民生活水平的提升,宠物已成为越来越多家庭的重要成员,爱宠人群规模日益庞大。这一群体对于宠物养护、健康管理、行为训练及生活娱......
  • 前端学习笔记-JS篇-05
    对象什么是对象对象(object):JavaScript里的一种数据类型,可以理解为是一种无序的数据集合,注意数组是有序的数据集合,用来描述某个事物例如描述一个人:人有姓名、年龄、性别等信息、还有吃饭睡觉打代码等功能;如果用多个变量保存则比较散,用对象比较统一。比如描述班主任信息:静......
  • 使用Mybatis 的PageHelper插件实现分页查询功能
    Mybatis提供了一个分页插件PageHelper,它会帮助我们自动完成分页和获取总数量的操作,可以方便实现分页查询。第一步,在pom.xml文件引入PageHelper依赖。<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-s......
  • ssm物流信息管理系统+jsp
    文章目录目录文章目录论文目录项目介绍开发环境系统实现论文参考论文目录1绪论1.1 选题背景1.2选题意义1.3研究内容2 系统开发技术2.1MySQL数据库2.2IDEA简介2.3SSM框架2.4Vue框架3系统分析3.1可行性研究3.1.1经济可行性3.1.2......