小程序上实现tab标签的变化

这篇具有很好参考价值的文章主要介绍了小程序上实现tab标签的变化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 小程序上想要实现成点击标签跳转某标签,在标签内滚动时随着超过滚动内容 tab 选中态变化。
  • 借助了 @vant/weapp 框架

小程序上实现tab标签的变化文章来源地址https://www.toymoban.com/news/detail-748250.html

index.wxml

    <view class="list-page">
        <van-tabs sticky active="{{ active }}"  bind:click="onHangeActive" bind:scroll="onScrollHeight" >
            <van-tab title="户型 {{house}}"  data-type="house"></van-tab>
            <van-tab title="周边 {{periphery}}" data-type="periphery"></van-tab>
            <van-tab title="详情 {{detail}}"   data-type="detail"></van-tab>
            <van-tab title="留言 {{message}}"data-type="message"></van-tab>
            <view class="house common-box ">
                户型1 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <text>\n</text>
                户型2 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <text>\n</text>
                户型3 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <view></view>
                户型4 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
            </view>
            <view class="periphery common-box">
                周边1 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <text>\n</text>
                周边2 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <text>\n</text>
                周边3 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
            </view>
            <view class="detail common-box">
                详情1 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <text>\n</text>
                详情2 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <text>\n</text>
                详情3 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <view></view>
                详情4 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <text>\n</text>
                详情5 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <text>\n</text>
                详情6 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
            </view>
            <view class="message common-box">
                留言1 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <text>\n</text>
                留言2 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <text>\n</text>
                留言3 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
                <view></view>
                留言4 Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores quam, beatae totam vel ab quas aut. Aliquid vero alias, ex distinctio sit quos ipsum autem mollitia consectetur sed, repudiandae nobis.
            </view>

        </van-tabs>

    </view>

index.ts

    Page({

        /**
        * 页面的初始数据
        */
        data: {
            active: 0,
            house: "",
            periphery: "",
            detail: "",
            message: "",
            tabList: [
            '户型1',
            '户型1',
            '户型3',
            '户型4'
            ]
        },

        /**
        * 生命周期函数--监听页面加载
        */
        onLoad() {
            wx.setNavigationBarTitle({
                title: '新demo'
            })
            this.onViewHeight('.house', 'house');
            this.onViewHeight('.periphery', 'periphery');
            this.onViewHeight('.detail', 'detail');
            this.onViewHeight('.message', 'message');

        },
        /**
        * 获取区域位置信息
        * @param sel 元素class
        * @param valueKey  绑定top值
        */
        onViewHeight(sel: any, valueKey: any) {
            wx.createSelectorQuery().select(sel).boundingClientRect((res: any) => {
                this.setData({
                    [valueKey]: res.top - 44
                })
            }).exec()
        },
        // 点击切换tab
        onHangeActive(e: any) {
            const { index, } = e.detail;
            this.setData({
                active: index
            })
            const type = index === 0 ? '.house' : index === 1 ? '.periphery' : index === 2 ? '.detail' : '.message';
            // 滚动到指定位置
            // const tmp:any =  this.data.detail
            wx.pageScrollTo({
                selector: type,
                // scrollTop: tmp
                offsetTop: -50,
                duration: 0
            })

        },
        onScrollHeight(e: any) {
            const { scrollTop } = e.detail;
            if(scrollTop) {
                const { active, periphery,detail,message} = this.data;
                let activeTmp = active;
                if(scrollTop < +periphery - 44 ) {
                    activeTmp = 0;
                }else if( scrollTop >= +periphery - 44 && scrollTop < +detail - 44 ) {
                    activeTmp = 1;
                }else if( scrollTop >= +detail - 44 && scrollTop < +message - 44 ) {
                    activeTmp = 2;
                }else if( scrollTop >= +message - 44 ) {
                    activeTmp = 3;
                }
                this.setData({
                    active: activeTmp
                })
            }
        },
        /**
        * 生命周期函数--监听页面初次渲染完成
        */
        onReady() {

        },

        /**
        * 生命周期函数--监听页面显示
        */
        onShow() {

        },

        /**
        * 生命周期函数--监听页面隐藏
        */
        onHide() {

        },

        /**
        * 生命周期函数--监听页面卸载
        */
        onUnload() {

        },

        /**
        * 页面相关事件处理函数--监听用户下拉动作
        */
        onPullDownRefresh() {

        },

        /**
        * 页面上拉触底事件的处理函数
        */
        onReachBottom() {

        },

        /**
        * 用户点击右上角分享
        */
        onShareAppMessage() {

        }
    })

index.wxss

    .common-box {
        padding: 10px;
        box-sizing: border-box;
    }
    .house {
        background-color: aquamarine;

    }
    .periphery {
        background-color: burlywood;
    }
    .detail {
        background-color: cornsilk;
    }
    .message {
        background-color: rgb(152, 141, 224);
        height: 100vh;
    }

index.json

    {
        "navigationBarTitleText": "demo",
        "usingComponents": {
            "van-tab": "@vant/weapp/tab/index",
            "van-tabs": "@vant/weapp/tabs/index"
        }
    }

到了这里,关于小程序上实现tab标签的变化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue实现标签页切换/制作tab组件【详细】

    在vue中实现标签页切换有如下2种方式: ① 使用动态组件 ② 使用路由 当然你可以使用第三方ui来实现,比如Element Plus。不过自己试着实现一下会更好。 这里讲一下第一和第二种方式,以组件实现为重点,那么就先讲一下使用路由的方式。 使用路由实现 Tab切换 首先,在rou

    2024年02月14日
    浏览(39)
  • 微信小程序:动态修改自定义组件中vant-tab选中标签的大小并加粗标签

            1.在自定义组件的wxss文件里添加如下代码,此处还可以改变字体颜色之类的:         2.在自定义组件的json文件中修改组件样式隔离模式:        3.还遇到一个天坑的问题,这个自定义组件必须放在父组件的第一个引用位置,否则无法生效。我之前tab组件在upload组

    2024年02月06日
    浏览(43)
  • vue实现多个tab标签页的切换与关闭

    2.实现原理  vuex,实现对当前激活项,当前tab列表,当前tab的translateX,当前缓存页,当前路由的状态管理。 将vuex中的数据保存到 sessionStorage 中,避免页面刷新丢失,当浏览器关闭时,清空数据。 通过ref定位,拿到当前窗口宽度与当前所在路由的tab标签的所有宽度,判断两

    2024年02月15日
    浏览(26)
  • 关于修改element-ui中Tabs标签页选中标签下划线缩短居中效果的实现方法

    需求描述: 下划线需要改为原来的一半,并且可以根据元素长度动态更换长度。 原样式: 改为以下样式: 思路如下 :element-ui通过一个独立的元素实现tab间切换能够达到下划线滑动的动态效果,所以将下划线独立为一个元素,并非使用tab自身的盒子设置下边框的样式去实现

    2024年02月12日
    浏览(33)
  • 【QT】一 设置布局后,控件大小会自动变化,如何设置想要的

    目录 1. 设置好控件大小 2. 设置布局  3. 设置layout  给一个QWidget控件内部设置布局后,原来内部的控件大小变小了,如何解决?           把最小值设置好。         选择整体,选择布局方式,这里为水平布局。 你会发现,可能显示不全。 选择整体,属性拉到最下面,

    2024年02月11日
    浏览(58)
  • layui 新增tab标签页

    效果:

    2024年02月10日
    浏览(34)
  • 前端仿新浪新闻 tabs 选项卡tabs标签页,根据文字多少自适应 tab项宽度

    前端仿新浪新闻 tabs 选项卡tabs标签页,根据文字多少自适应 tab项宽度, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下:     实现代码如下: #### 使用方法 ```使用方法 !-- v-model:选择序列 tabs:选择数组 myColor:下划线颜色 spaceLeft:tabs间距 height:设置高度

    2024年02月08日
    浏览(28)
  • jQuery UI 实例 - 标签页(Tabs)

    一种多面板的单内容区,每个面板与列表中的标题相关。 如需了解更多有关 tabs 部件的细节,请查看 API 文档 标签页部件(Tabs Widget)。 点击标签页,切换被划分为不同逻辑部分的内容。 点击选中的标签页来切换内容的关闭/打开状态。为了启用这个功能,需要设置  colla

    2024年02月02日
    浏览(34)
  • ElementUI tabs标签页样式改造美化

    大家如果有需要可以拿来修改使用,下面我也简单的贴上代码,代码没有注释,很抱歉,时间比较匆忙。 ## CSS:

    2024年02月15日
    浏览(65)
  • 微信小程序实现tab切换

    循环一个数组,切换数据的时候根据index索引来动态的设置选中项,设置fixed定位,固定在顶部。

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包