欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > Vue3图片懒加载(vue3-lazyload)

Vue3图片懒加载(vue3-lazyload)

2025/12/27 17:10:49 来源:https://blog.csdn.net/Dandrose/article/details/141353533  浏览:    关键词: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>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词