首页 > 其他分享 >Home-图片懒加载指令实现

Home-图片懒加载指令实现

时间:2023-12-10 16:11:06浏览次数:40  
标签:el useIntersectionObserver binding 指令 isIntersecting Home 加载 图片

场景和指令用法

场景:某些网站首页通常会很长,用户不一定能访问到页面靠下面的图片,这类图片通过懒加载优化手段可以做到,只有进入视口区域才发送图片请求

指令用法:

<img v-img-lazy="item.picture"/>

在图片img身上绑定指令,该图片只有正式进入到视口区域时才会发送图片网络请求

实现思路和步骤

核心原理:图片进入视口才发送资源请求

// 引入vueUse 中的工具,用于懒加载实现
import { useIntersectionObserver } from '@vueuse/core'
// 懒加载,在vue3中任何以 v 开头的驼峰式命名的变量都可以被用作一个自定义指令
// el为当前的DOM元素,binding为当前的指令配置对象
const vImgLazy = {
  mounted(el, binding) {
    console.log(el, binding)
    const { stop } = useIntersectionObserver(el, ([{ isIntersecting }]) => {
      // 当到达目标窗口时,isIntersecting 值为ture
      console.log(isIntersecting)
      if (isIntersecting) {
        // 进入视口区域
        el.src = binding.value
        stop()
      }
    })
  }
}

在组件中使用即可。
image

指令优化

在上诉的功能中,主要是局部指令的方式,但是在日常开发中,我们需要将指令进行全局注册,以免重复代码的开发使用。
步骤以上面方法一致,区别在于,本次不在组件内部去声明指令,而是在main.js中去定义声明。

  • 创建一个xxxxx.js文件用于声明指令的操作
// 引入vueUse 中的工具,用于懒加载实现
import { useIntersectionObserver } from '@vueuse/core'

export const lazyPlugin = {
  // 这里的install 是固定的语法,必须加上
  install(app) {
    app.directive('img-lazy', {
      //el为当前的DOM元素,binding为当前的指令配置对象
      mounted(el, binding) {
        const { stop } = useIntersectionObserver(el, ([{ isIntersecting }]) => {
          // 当到达目标窗口时,isIntersecting 值为ture
          // console.log(isIntersecting)
          if (isIntersecting) {
            // 赋值,将图片地址赋值到img标签中的src中
            el.src = binding.value
            //useIntersectionObserver默认情况下是一直监听的,我们需要手动停止监听
            stop()
          }
        })
      }
    })
  }
}
  • main.js 中导入并使用
import { lazyPlugin } from '@/directives'
app.use(lazyPlugin)

标签:el,useIntersectionObserver,binding,指令,isIntersecting,Home,加载,图片
From: https://www.cnblogs.com/zgf123/p/17892764.html

相关文章

  • 3.9 指令传送和预测的先进技术
    3.9指令传送和预测的先进技术高性能流水线,特别是多发射流水线中仅能够预测分支还不够,需要传送高带宽的指令流(多发射的取值周期变多,预测要等到译码阶段才知道是否为分支),因此需要使用BTB提高指令传送带宽。同时高级的前瞻技术能够进一步增强ILP。提高取值带宽分支目标缓冲BTB预......
  • MFC CStatic 里面加载图片
    ▲效果头文件新增空间指针:private:CStatic*pBMP;BOOLCMFCApplicationBMPDlg::OnInitDialog()里面初始化://TODO:在此添加额外的初始化代码//初始化字段pBMP=(CStatic*)GetDlgItem(IDC_STATIC_BMP);//除了添加控件,还有这种方式获得控件的方式。pBMP->Mod......
  • 【scikit-learn基础】--『数据加载』之外部数据集
    这是scikit-learn数据加载系列的最后一篇,本篇介绍如何加载外部的数据集。外部数据集不像之前介绍的几种类型的数据集那样,针对每种数据提供对应的接口,每个接口加载的数据都是固定的。而外部数据集加载之后,数据的字段和类型是不确定的。简单来说,我们在实际的数据分析工作中,用到的......
  • Spring Boot学习随笔- @SpringBootApplication详解、加载绝对路径配置文件、工厂创建
    学习视频:【编程不良人】2021年SpringBoot最新最全教程3.5@SpringBootApplication详解这是一个组合注解,就是由多个注解组成。下列注解红框内称为元注解(jdk提供)@Target:指定注解作用范围@Retention:指定注解什么时候生效重要注解@SpringBootConfiguration:自动配置Spring......
  • Linux-基本指令2
    上篇文章,我们分享了几个基本的指令。我们可以通过pwd指令来查看我们当前所在的路径,可以通过cd指令切换我们所在的路径,可以通过touch指令来创建普通文件,可以通过mkdir指令来创建目录文件,可以通过ls指令来查看当前路径下的文件等等。本篇文章,我们继续分享一些常用的基本指令。本次文......
  • 汇编-标志位操作指令
     CF置0.386.modelflat,stdcalloptioncasemap:none.stack4096ExitProcessPROTO,dwExitCode:DWORD.data.codemainPROCmoval,10000110bshlal,1;cf=1clc;CF置0cf=0IN......
  • 汇编-逻辑运算指令
     xor异或               or逻辑或                 and逻辑与not非                 TEST逻辑与        ......
  • Java-指令重排
    Java-指令重排指令重排(InstructionReordering)是指编译器或者处理器在不改变程序语义的前提下,重新安排指令的执行顺序,以优化性能或者满足硬件的执行特性。在多线程环境中,指令重排可能导致线程安全性问题,因为重排序可能改变原本按照程序顺序应该执行的操作次序。单线程-可提高程......
  • 【scikit-learn基础】--『数据加载』之样本生成器
    除了内置的数据集,scikit-learn还提供了随机样本的生成器。通过这些生成器函数,可以生成具有特定特性和分布的随机数据集,以帮助进行机器学习算法的研究、测试和比较。目前,scikit-learn库(v1.3.0版)中有20个不同的生成样本的函数。本篇重点介绍其中几个具有代表性的函数。1.分类聚类......
  • uniapp 图片懒加载的一种方式
    如果是列表页,可以采用前端分页,通过scroll-view下拉,在绑定图片地址信息,这样就能下拉部分,加载部分图片了。pageQuery(){letcurrentPage=this.pQuery.page;letpageSize=this.pQuery.size;constindex=(......