懒加载,,,,,,前端人都知道的一种性能优化方式,,,,,,简朴的来说,,,,,,只有当图片泛起在浏览器的可视区域内时,,,,,,才设置图片正真的路径,,,,,,让图片显示出来。。。这就是图片懒加载。。。
监听页面的scroll事务,判读元素距离页面的top值是否是小于即是页面的可视高度
判断逻辑代码如下
element.getBoundingClientRect().top <= document.documentElement.clientHeight ? 显示 : 默认
我们知道小程序页面的剧本逻辑是在JsCore中运行,,,,,,JsCore是一个没有窗口工具的情形,,,,,,以是不可在剧本中使用window,,,,,,也无法在剧本中操作组件。。。
以是关于图片懒加载就需要在数据上面做文章了。。。
我们使用两种方式来实现懒加载,,,,,,准备好没有,,,,,,一起来快乐的撸码吧。。。
小程序支持挪用createSelectQuery建设一个SelectorQuery实例,,,,,,并使用select要领来选择节点,,,,,,并通过boundingClientRect来获取节点信息。。。
wx.createSelectorQuery().select('.item').boundingClientRect((ret)=>{
console.log(ret)
}).exec()
悄悄告诉你,,,,,,小程序内里有个onPageScroll函数,,,,,,是用来监听页面的转动的。。。
尚有个getSystemInfo函数,,,,,,可以获取获取系统信息,,,,,,内里包括屏幕的高度。。。
接下来,,,,,,思绪就透彻了吧。。;;;U站缮厦娴穆呒,,,,,, 扒拉扒拉直接写代码就行了,这里只写下主要的逻辑,,,,,,完整代码请戳文末github
showImg(){
let group = this.data.group
let height = this.data.height // 页面的可视高度
wx.createSelectorQuery().selectAll('.item').boundingClientRect((ret) => {
ret.forEach((item, index) => {
if (item.top <= height) { 判断是否在显示规模内
group[index].show = true // 凭证下标改变状态
}
})
this.setData({
group
})
}).exec()
}
onPageScroll(){ // 转动事务
this.showImg()
}
至此,,,,,,我们完成了一个小程序版的图片懒加载,,,,,,只是头脑转变了下,,,,,,着实并没有改变实现方式。。。我们来学些新的工具吧。。。
节点相交状态是啥????它是一个新的API,,,,,,叫做IntersectionObserver, 本文只解说简朴的使用
小程序内里给它的界说是节点结构交织状态API可用于监听两个或多个组件节点在结构位置上的相交状态。。。这一组API常????梢杂糜谕贫夏承┙诘闶欠窨梢员挥没⒂卸啻蟊壤梢员挥没。。。
内里设计的看法主要有五个,,,,,,划分为
关于它的API有五个,,,,,,依次如下
1、createIntersectionObserver([this], [options]),,,,,,见名知意,建设一个IntersectionObserver实例
2、intersectionObserver.relativeTo(selector, [margins]), 指定节点作为参照区域,,,,,,margins参数可以放大缩小参照区域,,,,,,可以包括top、left、bottom、right四项
3、intersectionObserver.relativeToViewport([margin]),,,,,,指定页面显示区域为参照区域
4、intersectionObserver.observer(targetSelector, callback),,,,,,参数为指定监听的节点和一个回调函数,,,,,,目的元素的相交状态爆发转变时就会触发此函数,,,,,,callback函数包括一个result,,,,,,下面再讲
5、intersectionObserver.disconnect() 阻止监听,,,,,,回调函数不会再触发
我们主要使用intersectionRatio举行判断,,,,,,当它大于0时说明是相交的也就是可见的。。。
先来波测试题,,,,,,请说出下面的函数做了什么,,,,,,并且log函数会执行一再
1、
wx.createIntersectionObserver().relativeToViewport().observer('.box', (result) => {
console.log('监听box组件触发的函数')
})
2、
wx.createIntersectionObserver().relativeTo('.box').observer('.item', (result) => {
console.log('监听item组件触发的函数')
})
3、
wx.createIntersectionObserver().relativeToViewport().observer('.box', (result) => {
if(result.intersectionRatio > 0){
console.log('.box组件是可见的')
}
})
duang,,,,,,揭晓谜底。。。
第一个以目今页面的视窗监听了.box组件,,,,,,log会触发两次,,,,,,一次是进入页面一次是脱离页面
第二个以.box节点的结构区域监听了.item组件,,,,,,log会触发两次,,,,,,一次是进入页面一次是脱离页面
第三个以目今页面的视窗监听了.box组件,,,,,,log只会在节点可见的时间触发
好了,,,,,,题也做了,,,,,,API你也掌握了,,,,,,相信你已经可以使用IntersectionObserver来实现图片懒加载了吧,,,,,,主要逻辑如下
let group = this.data.group // 获取图片数组数据
for (let i in this.data.group){ wx.createIntersectionObserver().relativeToViewport().observe('.item-'+ i, (ret) => {
if (ret.intersectionRatio > 0){
group[i].show = true
}
this.setData({
group
})
})
}
至此,,,,,,我们使用两种方式实现了小程序版本的图片懒加载,,,,,,可以发明,,,,,,使用IntersectionObserver来实现不要太酸爽。。。
KESION 金狮贵宾会软件
KESION 金狮贵宾会软件是海内领先的在线教育软件及私域社交电商软件服务提供商,,,,,,恒久专注于为企业提供在线教育软件及社交电商SaaS平台解决方案。。。
公司焦点产品云开店SaaS社交电商服务平台、在线教育SaaS服务平台、教育企业数字化SaaS云平台、企微营销助手、私有化自力安排品牌网校和在线教育咨询等。。。KESION 一直通过手艺立异,,,,,,提供产品和服务,,,,,,助力企业向数字化转型,,,,,,通过科技驱动商业刷新,,,,,,让商业变得更智慧!
最新新闻,,,,,,沃尔玛扫码购小程序2018年4月上线以来,,,,,,已推广到50多个都会的近300家沃尔玛门店,,,,,,平均每个主顾收银时间约2分钟,,,,,,而“扫码购”平均收银时间仅需1分钟,,,,,,由于省时省力不必...
最近做的一个需求,,,,,,遇到一个问题,,,,,, 小程序 绘图现在只支持 px 单位,,,,,,设计图一般是以 iphone6 为基准设计,,,,,,若是严酷 iphone6 的尺寸举行代码编写,,,,,,放在其他尺寸的装备上,,,,,,肯定是不可的,,,,,,那么