懒加载(指的就是,当用户通过滚动条,滚动到哪,哪的结构,才开始发ajax,拿数据,渲染)都是这个前提
如何确定滚动到哪()
如何使用可以在vue.use网站上搜索useIntersectionObserver
首先npm i @vueuse/core
然后创建一个js文件
import { useIntersectionObserver } from '@vueuse/core'
import { ref } from 'vue'
export const useLazyData = (fn) => {
const target = ref(null)
const { stop } = useIntersectionObserver(target, ([{ isIntersecting }], observerElement) => {
if (isIntersecting) {
这个if判断的就是isIntersecting为true,就是滚动到了约定好的位置开始执行下一步,里面的发ajax了
//停止stop监控,这样,就能确保只有第一次的时候,滑动到图片的时候发ajax,下一次滑动到这个图片的时候
就不发ajax了,因为第一次已经发ajax获取到了数据
stop()
//是一个形参也就是发ajax的函数
fn()
}
},
{ // 元素进入可见区域的比值(0-1)指的是滑动到这个元素的啥比例,就开始执行上面的代码操作(图片懒加载
就是滑动到当前这个图片这,在发ajax)这个也是起决定性的作用的 threshold:0 表示刚滚动到这个元素那就发
ajax获取数据(范围是0-1)
threshold: 0
})
return target
}
使用定义好的useLazyData这个函数在页面中
import { useLazyData } from '@/compositions'
export default {
name: 'HomeSpecial',
components: { HomePanel },
setup () {
const list = ref([])
//这里的fn就是发ajax请求数据的函数(效果也就是到滚动到这个id为target的元素的时候,在发ajax获取数据,起到了
懒加载的效果)
const fn = () => {
findSpecial().then(data => {
console.log(data, '000000000')
list.value = data.result
})
}
const target = useLazyData(fn)
return { list, target }
}
这个target的重要性,就是只要用了这个懒加载的函数 渲染这个ajax数据的模板的根元素就得设置一个ref
等于这个target,才能渲染上去,看下图
<HomePanel title="最新专题" ref="target">
<template v-slot:right><XtxMore /></template>
<div class="special-list" ref="homeSpecial" v-if="list.length">
<div class="special-item" v-for="item in list" :key="item.id">
<RouterLink to="/">
<img :src="item.detailsUrl" alt />
<div class="meta">
<p class="title">
<span class="top ellipsis">{{item.title}}</span>
<span class="sub ellipsis">{{item.summary}}</span>
</p>
<span class="price">¥{{item.lowestPrice}}起</span>
</div>
</RouterLink>
<div class="foot">
<span class="like"><i class="iconfont icon-hart1"></i>100</span>
<span class="view"><i class="iconfont icon-see"></i>100</span>
<span class="reply"><i class="iconfont icon-message"></i>100</span>
</div>
</div>
</div>
<div v-else>
<XtxSkeleton v-for="i in 3" :key="i" width="404px" height="288px" bg='#ccc'/>
</div>
</HomePanel>
图片懒加载优化