1. 借用插件
@vueuse/core
插件的底层原理用到了h5中的# IntersectionObserver()
详情请看:IntersectionObserver
npm i @vueuse/core
2. 引用插件
import { useIntersectionObserver } from '@vueuse/core'
3.使用
<template>
<div ref="target"></div>
</template>
<script>
export default{
setup(){
const target = ref(null) // 把目标引用
const { stop } = useIntersectionObserver(
target, // target 是vue的对象引用。是观察的目标
// isIntersecting 是否进入可视区域,true是进入 false是移出
// observerElement 被观察的dom
([{ isIntersecting }], observerElement) => {
// 在此处可根据isIntersecting来判断(判断dom元素是否在可是区域内),然后做业务
if (isIntersecting) {
// 1. 停止观察
stop()
// 2. 发一次请求
//发送ajax
}
}
)
return { list, target }
}
}
</script>
4. 对数据懒加载进行封装
这里将此文件放入compositions/index.js
中
import { useIntersectionObserver } from '@vueuse/core'
import { ref } from 'vue'
/**
* 功能:数据的懒加载
* @param {*} fn 当目标可见时,需要调用一次函数
* @returns target:要观察的目标元素(dom元素)
*/
export function useLazyData (fn) {
const target = ref(null) // 把目标引用
const { stop } = useIntersectionObserver(
target, // target 是vue的对象引用。是观察的目标
// isIntersecting 是否进入可视区域,true是进入 false是移出
// observerElement 被观察的dom
([{ isIntersecting }], observerElement) => {
// 在此处可根据isIntersecting来判断,然后做业务
if (isIntersecting) {
// 1. 停止观察
stop()
// 2. 发一次请求
fn()
}
}
)
return target
}
5. 使用封装好的数据懒加载
<template>
<div ref="target"></div>
</template>
import { useLazyData } from '@/compositions/index.js'
<script>
setup () {
const goods = ref([])
const fn = () => {
//业务代码(请求数据)
}
const target = useLazyData(fn)
return { goods, target }
}
</script>
6. 效果图
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!