您当前的位置:首页 > 网站建设 > javascript
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax |

微信小程序实现锚点定位功能的方法实例

51自学网 2022-05-02 21:36:06
  javascript

前言

在小程序开发中,我们经常会遇到滚动列表查看的需求,那么使用锚点定位来实现可以达到交互体验更加友好的效果,我们看下项目中实现的效果:

            

功能实现

采用小程序视图容器组件实现:scroll-view

这里需要注意的是,竖向滚动时,scroll-view需要指定一个固定高度,我们看下WXML代码:

<scroll-view style="height:{{autoHeight}};" scroll-y scroll-into-view="{{toView}}" class="scroll-warp" scroll-with-animation="{{true}}" bindscroll="handelScroll">   <block wx:for="{{dataList}}" wx:key="{{index}}">      <view class="floorType" id="{{item.floor}}">     </view>   </block></scroll-view>

这里autoHeight是根据不同机型的高度动态计算出来的,scroll-view有个重要属性:scroll-into-view,它接收一个string值,即为滚动的地点(锚点),那么我们需要在scroll-view子节点也设置相应的锚点列表:如上图的class=floorType节点中的id属性。这样我们的滚动就有了一一对应的关系了,在筛选块点击楼层,将toView变量设置成对应的数据,列表也会滚动到对应的位置。
当我们滚动列表的时候,顶部的高亮筛选项也需要对应切换,那这个时候怎么办呢?

我们可以在bindscroll此事件上做文章:滚动列表的时候会触发此事件。

关键代码:

handelScroll(e) {        let scrollTop=e.detail.scrollTop;        let scrollArr= this.data.anchorArray;        if(scrollTop>=scrollArr[scrollArr.length-1]-this.data.autoHeight){                return;          }else {              for(let i=0;i<scrollArr.length;i++){                    if(scrollTop>=0&&scrollTop<scrollArr[0]){                    // selectFloorIndex控制筛选块高亮显示                        this.setData({                            selectFloorIndex: 0                        });                    }else if(scrollTop>=scrollArr[i-1]&&scrollTop<scrollArr[i]) {                        this.setData({                            selectFloorIndex: i                        });                 }             }         }    }

这里的anchorArray为所有锚点块所占页面高度的数组总和,用图可以看得更加清晰一点:

每个锚点块都有一个固定的高度,我们在拿到数据渲染完页面后,可以通过
boundingClientRect方法拿到类名为floorType各个节点的高度,并将这些高度装进anchorArray数组中,那么当我们滚动超过某块锚点高度之后,顶部筛选项也会随之切换到下一个。

关键代码:

            let query = wx.createSelectorQuery().in(this);            let heightArr =[];            let h = 0;            query.selectAll('.floorType').boundingClientRect((react)=>{                react.forEach((res)=>{                    h+=res.height;                    heightArr.push(h)                })                this.setData({                    anchorArray:heightArr                });            }).exec();

到这里,我们的锚点定位滚动已完成,希望能对大家有所帮助,如有问题,欢迎沟通指出!

总结

到此这篇关于微信小程序实现锚点定位功能的文章就介绍到这了,更多相关微信小程序锚点定位内容请搜索wanshiok.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持wanshiok.com!


Node与Python 双向通信的实现代码
JavaScript defineProperty如何实现属性劫持
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1