微信小程序 图片懒加载

虽然微信小程序自己的image组件中有懒加载属性,但是根据文档的说明:image组件的lazy-load懒加载属性将在图片在即将进入一定范围(上下三屏)时才开始加载。感觉懒加载效果不怎么明显。那这次将用另外一种方法来实现图片的懒加载。

1.相关的API

IntersectionObserver 对象,用于推断某些节点是否可以被用户看见、有多大比例可以被用户看见。
其中有一个API,用于监听指定对象与显示区域为参照区域的相交状态变化情况:IntersectionObserver.relativeToViewport(Object margins),简洁的说明就是:指定某个对象,如果该对象在滚动的时候出现在显示区域(与显示区域相交),则调用方法。

2.布局

<template>
  <view class='bg_div'>
  	<view class="ball">
  		<image src="../images/bar_1.png" wx:if="{{isShow}}" />
  	</view>
  </view>
</template>

<style lang='scss'>
  .bg_div{
  	width:100%;
  	height:300%;
  	display:flex;
  	justify-content:center;
  	align-items:center;
  	.ball{
  		width:300rpx;
  		height:300rpx;
  		border-radius:150rpx;
  		background:#f5f5f5;
  		display:flex;
  		justify-content:center;
  		align-items:center;
  		image{
  			width:70rpx;
  			height:70rpx;
  		}
  	}
  }
</style>

根据这个布局,现在只需要控制isShow,未在显示区域事isShow为false,在class为ball的这个view,即将滚动到显示区域的赋值为true,就能实现懒加载。因此,可以使用方法:IntersectionObserver.relativeToViewport(Object margins)来监听.ball与显示区域的相交情况来实现。

3.加载监听方法

<script>
import wepy from 'wepy'
export default class FirstPage extends wepy.page{
	data = {
		isShow:false
	}
	onLoad(){
		this.lazyLoad();
	}
	lazyLoad(){
		wx.createIntersectionObserver().relativeToViewport({bottom:0}).observe('.ball',(ret)=>{
					if(ret.intersectionRatio > 0){
						this.isShow = true;
						console.log('显示',ret.intersectionRatio);
					}
					this.$apply();
				});
	}
}
</script>

在页面加载时创建监听,监听ball与显示区域的相交情况,当相交的时候,会调用方法。(默认创建的IntersectionObserver 对象实例的属性,阈值为0,相当于相交比例达到该阈值时将调用方法),因此当ball将要显示时(与显示区域相交),将isShow赋值为true,那图片将显示,因此实现图片的懒加载。

4.相关文档

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值