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

 更新时间:2021年07月18日 10:44:13   作者:于不凡呀  
“锚点”功能在实际应用设计的好,可以提高用户体验,这篇文章主要给大家介绍了关于微信小程序实现锚点定位功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

前言

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

            

功能实现

采用小程序视图容器组件实现: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();

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

总结

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

相关文章

  • 基于el-slider实现一个能拖动的时间范围选择器

    基于el-slider实现一个能拖动的时间范围选择器

    这篇文章主要介绍了基于el-slider实现一个能拖动的时间范围选择器,并通过实例代码介绍了基于element-ui el-slider实现滑动限位器的方法,需要的朋友可以参考下
    2024-02-02
  • js实现搜索栏效果

    js实现搜索栏效果

    这篇文章主要为大家详细介绍了js实现搜索栏效果,以及焦点问题的解决,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 浅谈Webpack下多环境配置的思路

    浅谈Webpack下多环境配置的思路

    这篇文章主要介绍了浅谈Webpack下多环境配置的思路,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Javascript中的基本类型和引用类型概述说明

    Javascript中的基本类型和引用类型概述说明

    这篇文章主要介绍了Javascript中的基本类型和引用类型的相关资料,包括基本类型和引用类型的概念及区别,数据类型检测给大家详细介绍了js基本类型和引用类型,非常不错,需要的朋友可以参考下
    2022-11-11
  • javascript中普通函数的使用介绍

    javascript中普通函数的使用介绍

    本文为大家介绍下javascript中普通函数的使用,下面有个不错的示例,感兴趣的朋友可以参考下
    2013-12-12
  • JS字符串常用操作方法实例小结

    JS字符串常用操作方法实例小结

    这篇文章主要介绍了JS字符串常用操作方法,结合实例形式总结分析了javascript字符串获取、返回、拼接、替换、搜索、计算等相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • JavaScript通过Date-Mask将日期转换成字符串的方法

    JavaScript通过Date-Mask将日期转换成字符串的方法

    这篇文章主要介绍了JavaScript通过Date-Mask将日期转换成字符串的方法,涉及javascript日期、数组及字符串操作的相关技巧,需要的朋友可以参考下
    2015-06-06
  • javascript canvas检测小球碰撞

    javascript canvas检测小球碰撞

    这篇文章主要为大家详细介绍了javascript canvas检测小球碰撞,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • javascript判断图片是否加载完成的方法推荐

    javascript判断图片是否加载完成的方法推荐

    下面小编就为大家带来一篇javascript判断图片是否加载完成的方法推荐。小编觉得挺不错的,现在分享给大家,也给大家做个参考。
    2016-05-05
  • 手把手教你用JS实现回车评论功能

    手把手教你用JS实现回车评论功能

    最近在写一个问答功能,类似于评论,下面这篇文章主要给大家介绍了关于如何用JS实现回车评论功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06

最新评论