vant-weapp源码解析---Tab标签页

本文介绍了如何手写一个标签栏组件,包括实现滚动效果和选中标签的动画。通过使用scroll-x,scroll-with-animation,scroll-left属性实现滚动,并在点击标签时调整scroll-left来滚动到相应位置。同时,文章提到了动态计算下划线滑动动画的方法,以实现视觉上的平滑过渡。
摘要由CSDN通过智能技术生成

这个标签栏,属于一个很常见的组件,一般我不用这个组件,自己手写一个scroll-view以及样式,更加轻便。但是我写的最简单的标签页没有滚动效果,以及选中标签动画效果。因此根据标签栏滚动学习下,并且自己手写一个标签栏。

在这里插入图片描述

这些是所涉及到的文件以及代码

在这里插入图片描述

这是滚动需要的页面元素和样式

在这里插入图片描述

其中可以出现点击滚动效果的是因为有scroll-x,scroll-with-animation,scroll-left这个三个属性。
然后通过点击标签进行调用计算scroll-left的方法,这样就可以进行滚动。

<scroll-view scroll-x="{{ scrollable }}" scroll-with-animation="{{ scrollWithAnimation }}" scroll-left="{{ scrollLeft }}" class="{{ utils.bem('tabs__scroll', [type]) }}" style="{{ color ? 'border-color: ' + color : '' }}">
        <view class="{{ utils.bem('tabs__nav', [type, { complete: !ellipsis }]) }} nav-class" style="{{ computed.navStyle(color, type) }}">
          <view wx:if="{{ type === 'line' }}" class="van-tabs__line" style="{{ computed.lineStyle({ color, lineOffsetLeft, lineHeight, skipTransition, duration, lineWidth, inited }) }}" />
            <view wx:for="{{ tabs }}" wx:key="index" data-index="{{ index }}" class="{{ computed.tabClass(index === currentIndex, ellipsis) }} {{ utils.bem('tab', { active: index === currentIndex, disabled: item.disabled, complete: !ellipsis }) }}" style="{{ computed.tabStyle({ active: index === currentIndex, ellipsis, color, type, disabled: item.disabled, titleActiveColor, titleInactiveColor, swipeThreshold, scrollable }) }}" bind:tap="onTap">
              <view class="{{ ellipsis ? 'van-ellipsis' : '' }}" style="{{ item.titleStyle }}">
                {{ item.title }}
                <van-info wx:if="{{ item.info !== null || item.dot }}" info="{{ item.info }}" dot="{{ item.dot }}" custom-class="van-tab__title__info" />
              </view>
            </view>
        </view>
 </scroll-view>

在这里插入图片描述

这个方法是计算scrollLeft 距离的方法,选出元素(van-tabs__nav黄色框和van-tab每个红色框)得到宽度,并且计算距离scrollLeft的位置。
getAllRect和getRect是用来选择节点的封装方法

scrollIntoView() {
            const { currentIndex, scrollable, scrollWithAnimation } = this.data;
            if (!scrollable) {
                return;
            }
            Promise.all([
                getAllRect(this, '.van-tab'),
                getRect(this, '.van-tabs__nav'),
            ]).then(([tabRects, navRect]) => {
              console.log("tabRects",tabRects)
              console.log("tabRects",navRect)
                const tabRect = tabRects[currentIndex];
                const offsetLeft = tabRects
                    .slice(0, currentIndex)
                    .reduce((prev, curr) => prev + curr.width, 0);
                this.setData({
                    scrollLeft: offsetLeft - (navRect.width - tabRect.width) / 2,
                });
                if (!scrollWithAnimation) {
                    nextTick(() => {
                        this.setData({ scrollWithAnimation: true });
                    });
                }
            });
        },

在这里插入图片描述

根据Tab标签页的源码,页面元素进行修改,js不变,依然使用scrollIntoView方法。在进行tab切换的时候调用scrollIntoView方法。

在这里插入图片描述

下划线滑动动画

这个是涉及到的下划线的页面元素和样式

在这里插入图片描述

这是动态滑动样式的方法,其中定义了移动的距离,背景颜色,高度,移动速度。

在这里插入图片描述

计算lineOffsetLeft的方法,和上面的计算方法同理

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
vant-weapp是一个基于微信小程序的组件库,提供了丰富的组件和工具,用于开发高质量的微信小程序。它由有赞团队开发和维护,具有良好的代码质量和稳定性。 vant-weapp的演示源码包含了各种组件的示例,可以帮助开发者更好地了解和掌握vant-weapp的使用方法。演示源码中每个组件都有对应的示例代码和演示效果,开发者可以直接在这个基础上进行修改和定制,快速构建自己的小程序。 演示源码中主要包含了以下几个方面的内容: 1. 组件示例:vant-weapp提供了丰富的小程序组件,包括按钮、标签、弹出层、轮播图等等。演示源码中展示了这些组件的使用方法和效果,开发者可以根据自己的需求进行选择和定制。 2. 功能示例:除了基本的组件,vant-weapp还提供了一些常用的功能和工具,例如图片上传、下拉刷新、上拉加载等等。演示源码中展示了这些功能的使用方法和效果,可以帮助开发者快速实现相应的功能。 3. 样式示例:vant-weapp提供了一套美观的样式库,可以帮助开发者快速构建漂亮的小程序界面。演示源码中展示了各种样式的使用方法和效果,开发者可以根据自己的需求进行修改和定制。 总之,vant-weapp的演示源码是一个很好的学习和参考资源,开发者可以通过阅读源码和运行示例,更好地了解和使用vant-weapp,提高自己的开发效率和代码质量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值