Vue3图片懒加载(vue3-lazyload)

Vue2图片懒加载

参考文档:vue3-lazyload

效果如下图:vue3-lazyload@0.3.8

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在线预览

安装

npm install vue3-lazyload
# or
yarn add vue3-lazyload
# or
pnpm add vue3-lazyload

引入并注册

import { createApp } from 'vue'
import VueLazyLoad from 'vue3-lazyload'
import Default from 'images/default.jpg'
import Error from 'images/error.jpg'
import App from './App.vue'

const app = createApp(App)
app.use(VueLazyLoad, {
  loading: Default, // 加载中占位图
  error: Error, // 加载失败占位图
  lifecycle: {
    loading: (el: Element) => {
      console.log('loading', el)
    },
    error: (el: Element) => {
      console.log('error', el)
    },
    loaded: (el: Element) => {
      console.log('loaded', el)
    }
  }
})
app.mount('#app')

使用

基本使用

<script lang="ts" setup>
import { ref } from 'vue'
const Image1 = ref('https://cdn.jsdelivr.net/gh/themusecatcher/resources@0.0.5/5.jpg')
</script>
<template>
  <div class="m-image">
    <img class="u-image" v-lazy="Image1" />
  </div>
</template>
<style lang="less" scoped>
.m-image {
  width: 200px;
  height: 200px;
  border: 1px solid #d9d9d9;
  border-radius: 8px;
  .u-image {
    width: 100%;
    height: 100%;
    border-radius: 8px;
    &[lazy=loading] {
      object-fit: cover;
    }
    &[lazy=loaded] {
      object-fit: contain;
    }
  }
}
</style>

自定义配置

<script setup lang="ts">
import { ref } from 'vue'
import { Space, Button } from 'vue-amazing-ui'
import 'vue-amazing-ui/css'
const Image1 = 'https://cdn.jsdelivr.net/gh/themusecatcher/resources@0.0.5/5.jpg'
const Image2 = 'https://cdn.jsdelivr.net/gh/themusecatcher/resources@0.0.5/8.jpg'
const Image3 = 'https://cdn.jsdelivr.net/gh/themusecatcher/resources@0.0.5/9.jpg'
const lazyOptions = ref({
  src: Image1,
  // loading: Image2,
  // error: Image2,
  lifecycle: {
    loading: (el: Element) => {
      console.log('image loading', el)
    },
    error: (el: Element) => {
      console.log('image error', el)
    },
    loaded: (el: Element) => {
      console.log('image loaded', el)
    }
  }
})
function onClick () {
  lazyOptions.value.src = Image3
}
</script>
<template>
  <Space align="center" :size="30">
    <div class="m-image">
      <img class="u-image" v-lazy="{...lazyOptions}" />
    </div>
    <Button type="primary" @click="onClick">Change Image</Button>
  </Space>
</template>
<style lang="less" scoped>
.m-image {
  width: 200px;
  height: 200px;
  border: 1px solid #d9d9d9;
  border-radius: 8px;
  .u-image {
    width: 100%;
    height: 100%;
    border-radius: 8px;
    &[lazy=loading] {
      object-fit: cover;
    }
    &[lazy=loaded] {
      object-fit: contain;
    }
  }
}
</style>

延迟加载

<script lang="ts" setup>
import { ref } from 'vue'
import { Space, Button } from 'vue-amazing-ui'
import 'vue-amazing-ui/css'
const Image1 = 'https://cdn.jsdelivr.net/gh/themusecatcher/resources@0.0.5/5.jpg'
const Image2 = 'https://cdn.jsdelivr.net/gh/themusecatcher/resources@0.0.5/8.jpg'
const Image3 = 'https://cdn.jsdelivr.net/gh/themusecatcher/resources@0.0.5/9.jpg'
const lazyOptions = ref({
  src: Image1,
  // loading: Image2,
  // error: Image2,
  lifecycle: {
    loading: (el: Element) => {
      console.log('image loading', el)
    },
    error: (el: Element) => {
      console.log('image error', el)
    },
    loaded: (el: Element) => {
      console.log('image loaded', el)
    }
  }
})
function onClick () {
  lazyOptions.value.src = Image3
}
</script>
<template>
  <Space align="center" :size="30">
    <div class="m-image">
      <img class="u-image" v-lazy="{...lazyOptions, delay: 1000}" />
    </div>
    <Button type="primary" @click="onClick">Change Image</Button>
  </Space>
</template>
<style lang="less" scoped>
.m-image {
  width: 200px;
  height: 200px;
  border: 1px solid #d9d9d9;
  border-radius: 8px;
  .u-image {
    width: 100%;
    height: 100%;
    border-radius: 8px;
    &[lazy=loading] {
      object-fit: cover;
    }
    &[lazy=loaded] {
      object-fit: contain;
    }
  }
}
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

theMuseCatcher

您的支持是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值