首页 > 其他分享 >请使用vue实现一个图片懒加载

请使用vue实现一个图片懒加载

时间:2025-01-03 10:19:37浏览次数:9  
标签:vue 加载 Vue lazyload main 图片

在Vue.js中实现图片懒加载可以通过多种方式完成,其中一种常见且简单的方法是使用v-lazy指令(通常借助第三方库如vue-lazyload),也可以手动实现。以下是使用vue-lazyload库的步骤:

使用vue-lazyload

  1. 安装vue-lazyload

    你可以使用npm或yarn来安装这个库。

    npm install vue-lazyload --save
    # 或者
    yarn add vue-lazyload
    
  2. 在Vue项目中引入并使用vue-lazyload

    通常你会在项目的入口文件(如main.jsmain.ts)中引入并配置vue-lazyload

    // main.js 或 main.ts
    import Vue from 'vue';
    import App from './App.vue';
    import VueLazyload from 'vue-lazyload';
    
    // 配置 vue-lazyload,你可以传递一个选项对象来配置它
    Vue.use(VueLazyload, {
      preLoad: 1.3,
      error: 'dist/error.png', // 图片加载失败时的占位图
      loading: 'dist/loading.gif', // 图片加载时的占位图
      attempt: 1
    });
    
    new Vue({
      render: h => h(App),
    }).$mount('#app');
    
  3. 在组件中使用v-lazy指令

    现在你可以在任何Vue组件中使用v-lazy指令来懒加载图片。

    <template>
      <div>
        <h1>图片懒加载示例</h1>
        <img v-lazy="imageSrc1" alt="Image 1">
        <img v-lazy="imageSrc2" alt="Image 2">
        <img v-lazy="imageSrc3" alt="Image 3">
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          imageSrc1: 'https://example.com/image1.jpg',
          imageSrc2: 'https://example.com/image2.jpg',
          imageSrc3: 'https://example.com/image3.jpg'
        };
      }
    };
    </script>
    
    <style scoped>
    img {
      width: 300px;
      height: 200px;
      object-fit: cover;
      margin: 10px;
    }
    </style>
    

手动实现图片懒加载

如果你不想依赖第三方库,也可以手动实现图片懒加载。以下是一个简单的示例:

  1. 创建一个自定义指令

    首先,在Vue项目中创建一个自定义指令来实现懒加载逻辑。

    // lazyload.js
    export default {
      inserted: (el, binding) => {
        const options = {
          rootMargin: '0px 0px 300px 0px',
          threshold: 0.1
        };
    
        const observer = new IntersectionObserver((entries, observer) => {
          entries.forEach(entry => {
            if (entry.isIntersecting) {
              const img = entry.target;
              img.src = binding.value;
              observer.unobserve(img);
            }
          });
        }, options);
    
        observer.observe(el);
      }
    };
    
  2. 在Vue项目中注册并使用自定义指令

    在入口文件(如main.jsmain.ts)中注册这个指令。

    // main.js 或 main.ts
    import Vue from 'vue';
    import App from './App.vue';
    import lazyload from './lazyload'; // 假设你的文件名为lazyload.js
    
    Vue.directive('lazy', lazyload);
    
    new Vue({
      render: h => h(App),
    }).$mount('#app');
    
  3. 在组件中使用自定义指令

    现在你可以在任何Vue组件中使用v-lazy指令来懒加载图片。

    <template>
      <div>
        <h1>图片懒加载示例</h1>
        <img v-lazy="imageSrc1" alt="Image 1" data-src="https://example.com/image1.jpg">
        <img v-lazy="imageSrc2" alt="Image 2" data-src="https://example.com/image2.jpg">
        <img v-lazy="imageSrc3" alt="Image 3" data-src="https://example.com/image3.jpg">
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          imageSrc1: '',
          imageSrc2: '',
          imageSrc3: ''
        };
      }
    };
    </script>
    
    <style scoped>
    img {
      width: 300px;
      height: 200px;
      object-fit: cover;
      margin: 10px;
      /* 初始状态可以使用占位图 */
      background-color: #f0f0f0;
    }
    </style>
    

    注意,这里我们使用了data-src来存储真实的图片地址,因为v-lazy指令会在图片进入视口时将其赋值给src属性。

通过上述步骤,你可以在Vue项目中实现图片懒加载功能。选择使用第三方库还是手动实现,取决于你的具体需求和项目复杂度。

标签:vue,加载,Vue,lazyload,main,图片
From: https://www.cnblogs.com/ai888/p/18649496

相关文章

  • 使用vue-seamless-scroll实现el-table表格滚动
    需求实现 <divclass="appeal-table"style="display:inline-block;width:100%;"><el-table:data="tableData1"stripestyle="width:100%;"@row-click="......
  • 深入浅出 Vue 3:新特性与最佳实践
    Vue3是Vue.js框架的最新版本,带来了诸多重要的新特性与性能提升。本文将带您深入了解Vue3的核心特性,并结合一些最佳实践帮助您更高效地开发Vue3应用。Vue3与Vue2的区别Vue3是对Vue2的重构和优化,整体保留了Vue2的核心概念,但在性能、可维护性、灵活性等......
  • vue-router的原理是什么?
    vue-router的原理主要涉及两个方面:Hash模式和History模式。这两种模式都是用于在单页面应用(SPA)中实现前端路由,即URL与UI之间的映射关系,使得URL变化能够引起UI的更新而无需刷新页面。1.Hash模式原理:Hash模式利用URL中的hash(#)部分来实现路由功能。hash是URL的锚点,用于指示页面中......
  • 使用vue-router你踩过哪些坑?
    在使用VueRouter进行前端开发时,我遇到过以下几个常见的坑:路由模式问题:VueRouter提供了两种路由模式:hash和history。hash模式使用URL的hash(#后面的部分)来模拟一个完整的URL,不需要服务器配置即可使用。然而,它在URL中包含了一个#,这可能不符合某些应用的需求。hist......
  • 【cobalt strike】解码用于加载cobalt strike shellcode的简单.hta加载器过程
    #cobaltstrike我们将在本文介绍解码用于加载cobaltstrikeshellcode的简单.hta加载器的过程,接下来用文本编辑器执行初始分析,并使用CyberChef提取嵌入的shellcode,将使用模拟器(SpeakEasy)验证shellcode,使用Ghidra执行一些基本分析。哈希:2c683d112d528b63dfaa7ee0140eebc4960f......
  • vue3 tsx ref dom获取方式
    在Vue3中使用TypeScript和TSX(TypeScript的JSX语法)时,获取DOM元素的方式与普通的Vue组件略有不同。Vue提供了ref和reactive等响应式API来帮助我们处理组件的状态,而当我们需要直接访问DOM节点时,我们可以使用ref。下面是一个简单的例子,展示如何在Vue3+TSX......
  • vue3 tsx 如何暴漏方法给外部,expose
    setup函数确实可以直接接收一个expose参数,通过这个参数我们可以控制哪些属性或方法暴露给父组件。这种方式在使用<scriptsetup>语法时特别有用,并且它提供了一种更直接的方法来指定要暴露的内容,而不需要使用编译器宏或者生命周期钩子。下面是一个使用setup函数的expose......
  • Vue cli 插件( plugins.js)
    1、功能增加Vue2、创建插件(plugins.js)文件a,b为其它参数exportdefault{install(Vue,a,b){//全局混入Vue.mixin({data(){return{x:100,y:99}......
  • Vue cli mixin (混入)
    1、功能可以把多个组件共用的配置提取成一个混入对象2、使用方式a、创建混入(mixin.js文件)import{computed}from"vue"exportconstmixin={methods:{showName(){alert(this.name)}},data(){return{......
  • 【Cesium】二、vite+vue3+cesium 使用,项目中使用cesium 地图,具体步骤。快速搭建Cesium
    文章目录一、准备项目二、安装三、修改App.vue四、启动项目五、消除控件六、修改底图一、准备项目这里我已经创建好vite+vue3项目模板了,需要可以直接克隆下来,进行下面步骤。vite-commit:点击跳转GitHub二、安装下载依赖yarnaddcesiumvite-plugin-cesiumvite......