【小程序】scrollview制作tab导航栏,点击tab自动滚动到指定位置

这篇具有很好参考价值的文章主要介绍了【小程序】scrollview制作tab导航栏,点击tab自动滚动到指定位置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前几天遇到一个需求,做一个答题的界面,顶部是题目编号列表,下面是题目,点击题目编号跳转到相应题目。一开始想用vant weapp中的Tab标签页组件来做,也试着用过,中间遇到了某些问题效果不太理想。具体我也忘了啥问题。最后还是用scroll-view+swiper来实现了这一个功能。最后实现效果图如下。   

原生微信小程序tab实现锚点,滚动联动,小程序,小程序

主要是通过在scroll-view中设置 scroll-with-animation="{{ scrollWithAnimation }}" scroll-into-view="{{toview}}" 来实现这个点击自动滚动的效果。

原生微信小程序tab实现锚点,滚动联动,小程序,小程序

废话不多说,直接上代码了。

wxml

<view>
    <scroll-view scroll-x="true" style="height: 134rpx;width: 100%; box-sizing: border-box;overflow: hidden;line-height: 134rpx;background: white; font-size: 16px; white-space: nowrap;position: fixed;top: 0; left: 0; z-index: 99;" scroll-with-animation="{{ scrollWithAnimation }}" scroll-into-view="{{toview}}" show-scrollbar="false" enhanced="true">
        <view wx:for="{{questionList}}" style="display: inline-block;" class="questionListClass" bindtap="questionClick" data-index="{{index}}" id="tab{{index}}">
            <view class="questionClass {{currentTab==index?'now':item.answered?'active':''}}">{{index+1}} </view>
        </view>
    </scroll-view>
    <view style="margin-top: 150rpx;">
        <swiper style="height: {{swiperHeight}}px;" current="{{currentTab}}" bindchange="swiperChange">
            <swiper-item wx:for="{{questionList}}" style="position: relative;display: flex;flex-direction: column;overflow:scroll">
                <scroll-view scroll-y="true">
                    <view style="display: flex;flex-direction: column;">
                        <view style="background: white;padding: 32rpx;align-items: center;font-size: 28rpx;">
                            <text>{{index+1}}、</text>
                        </view>
                    </view>
                </scroll-view>
            </swiper-item>
        </swiper>

    </view>
    <view style="display: flex;position: absolute;bottom: 0;height: 128rpx;width: 100%;align-items: center;justify-content: center;">
        <view wx:if="{{currentTab==0}}" style="height: 74rpx;background: #EB3722;border-radius: 128rpx;width: 80%;display: flex;justify-content: center;align-items: center;color:white" bindtap="nextClick">下一题</view>
        <view wx:else style="display: flex;align-items: center;justify-content:space-evenly;width: 100%">
            <view style="height: 74rpx;background: #EEEEEE;border-radius: 128rpx;width: 40%;display: flex;justify-content: center;align-items: center;color: #666666;" bindtap="preClick">上一题</view>
            <view style="height: 74rpx;background: #EB3722;border-radius: 128rpx;width: 40%;display: flex;justify-content: center;align-items: center;color:white" bindtap="nextClick">{{currentTab==questionList.length-1?'交卷':'下一题'}}</view>
        </view>
    </view>
</view>

 wxss

.container {
    position: relative;
    width: 100%;
}

::-webkit-scrollbar {
    display: none;
    width: 0;
    height: 0;
    color: transparent;
  }
  
.questionListClass .questionClass {
    background: #F6F7FB;
    width: 64rpx;
    height: 64rpx;
    align-items: center;
    display: flex;
    justify-content: center;
    margin-left: 16rpx;
    margin-right: 16rpx;
    border-radius: 64rpx;
    color: #333333;
    font-size: 32rpx;
    /* margin-top: 50%; */
    border: 2rpx solid white;
}

.questionClass.active {
    background: linear-gradient(180deg, #FE5196 0%, #F77062 100%);
    width: 64rpx;
    height: 64rpx;
    align-items: center;
    display: flex;
    justify-content: center;
    margin-left: 16rpx;
    margin-right: 16rpx;
    border-radius: 64rpx;
    color: white;
    font-size: 32rpx;
    /* margin-top: 50%; */
    border: 2rpx solid white;
}

.questionClass.now {
    background: white;
    width: 64rpx;
    height: 64rpx;
    align-items: center;
    display: flex;
    justify-content: center;
    margin-left: 16rpx;
    margin-right: 16rpx;
    border-radius: 64rpx;
    color: #EB3722;
    font-size: 32rpx;
    /* margin-top: 50%; */
    border: 2rpx solid #EB3722;
}

js文章来源地址https://www.toymoban.com/news/detail-842442.html

Page({
    /**
     * 页面的初始数据
     */
    data: {
        questionList: [,,,,,,,,,,],
        currentTab: 0,
        swiperHeight: 300,
        toview: 'tab0',
        scrollWithAnimation: true,
    },

    questionClick(e) {
        console.log(e)
        this.setData({
            currentTab: e.currentTarget.dataset.index
        })

        if (e.currentTarget.dataset.index - 3 > 0) {
            this.setData({
                toview: 'tab' + (e.currentTarget.dataset.index - 3)
            })
        } else {
            this.setData({
                toview: 'tab0'
            })
        }

        console.log(this.data.toview)
        // if (this.currentIndex < 10) {
        //     this.scrollinto = 'tab0'
        // }

    },
    nextClick(e) {
        if (this.data.currentTab == this.data.questionList.length - 1) {//交卷
            
        } else {
            this.setData({
                currentTab: this.data.currentTab + 1
            })
            if (this.data.currentTab - 3 > 0) {
                this.setData({
                    toview: 'tab' + (this.data.currentTab - 3)
                })
            } else {
                this.setData({
                    toview: 'tab0'
                })
            }
        }
    },
    preClick(e) {
        this.setData({
            currentTab: this.data.currentTab - 1
        })
        if (this.data.currentTab - 3 > 0) {
            this.setData({
                toview: 'tab' + (this.data.currentTab - 3)
            })
        } else {
            this.setData({
                toview: 'tab0'
            })
        }
    },
})

到了这里,关于【小程序】scrollview制作tab导航栏,点击tab自动滚动到指定位置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • uniapp小程序手写tab导航栏切换(点击切换样式,动态样式绑定)

    最近写uniapp,ui里面有一个导航栏切换的逻辑,因为要跟UI保持一致,对于组件库很难实现高度定制,所以这里就自己手写实现一个点击切换的导航栏。先看下图效果: 主要实现的是通过点击切换导航栏,并且样式有一个切换的效果,大家可以根据自己的需求进行样式的DIY

    2024年02月12日
    浏览(56)
  • unity scrollview滚动到指定的位置

    方法一:通过下标 方法二:原文1 原文2 方法一没测试 这里给方法二增加注释理解 图1 图2 图3 图4

    2024年01月20日
    浏览(45)
  • 【微信小程序点击滚动页面到指定位置】

    scroll-view :https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html 补充: 1: scroll-view设置高度:style=“height:100%” 2: scroll-view设置纵向滚动:scroll-y=“true” 3: scroll-view设置要去的id( 这个必须动态设置才生效 ):scroll-into-view=“{{toView}}”

    2024年02月09日
    浏览(39)
  • Android——使用ScrollView实现滚动效果,当内容超出屏幕范围时自动滑动显示

    Android——使用ScrollView实现滚动效果,当内容超出屏幕范围时自动滑动显示 ScrollView是Android中常用的布局容器,用于在屏幕空间有限的情况下实现内容的滑动显示。当内容超出屏幕范围时,用户可以通过滑动屏幕来查看更多内容,提供了更好的用户体验。 在Android中,使用Sc

    2024年01月16日
    浏览(47)
  • 小程序中的canvas不跟随scrollView滚动

    问题原因,官方文件说明:canvas为原生组件故有一下的性质: 原文链接:https://blog.csdn.net/qq_25740691/article/details/81867382 解决方法1:看看是不是给最外层标签page定义了height:100%的属性或者overflow相关的属性,如果是的话去掉。检查你的canvas的所有父级元素是否设置了height:1

    2024年02月06日
    浏览(41)
  • 解决刷新或者重新点击导航栏,对应的侧边栏选中状态丢失或TAB页面与选中状态不符合

     一:解决刷新时,侧边栏选中状态丢失或者选中状态与TAB页面不符合。 select 菜单激活回调 index: 选中菜单项的 index, indexPath: 选中菜单项的 index path default-active 当前激活菜单的 index string — — 1.给菜单绑定一个属性为activeMenu 2.在data中定义一个activeMenu的初始值为第一个选项或

    2024年02月12日
    浏览(57)
  • [快速上手RN] 3. React native 制作底部导航栏 Bottom Tab Bar

    [快速上手RN] 0.React Native 快速启动项目 [快速上手RN] 1. React native 项目集成UI Kitten [快速上手RN] 2. React native 项目色彩主题色编辑及使用 [快速上手RN] 3. React native 制作底部导航栏 Bottom Tab Bar [快速上手RN] 4. React native 集成redux 首先我们确认目标 在APP底部新增一个导航栏 导航栏点

    2024年02月05日
    浏览(53)
  • taro(小程序一样) ScrollView 滚动到底部或者顶部 再次设置scrollIntoView 无效

    产生这个bug的原因:当我们第一次滑倒底部点击A回到顶部成功,再次滑倒底部,再次点击A无法回到顶部,因为此时的scrollIntoView 对应的值还是A,需要将scrollIntoView对应的值清空,然后重新赋值A,即可解决 解决办法:滑动到顶部或者底部时,清空之前设置的scrollIntoId即可 完

    2024年02月11日
    浏览(45)
  • 【element-ui 中 el-tabs+el-menu 实现点击菜单 新增导航tab页 并实现关闭其他、当前、所有的功能】

    element-ui 【el-tabs+el-menu 实现点击菜单 新增导航tab页 并实现关闭其他、当前、所有的功能】 文章分3个部分 el-tabs 以及右击菜单代码 vuex 代码及其方法实现 router路由信息常规写法el-menu写法常规(自行去掉修饰部分) el-tabs 以及右击菜单代码

    2024年02月11日
    浏览(56)
  • vue3简单写导航anchor示例(支持点击高亮和滚动判断高亮)

    function anchorClick(index) {   forceStop.value = true;   time = Date.now();   wheelRef.value.children[index].scrollIntoView({     block: \\\'start\\\',     behavior: \\\'smooth\\\'   });   // 给一些延时, 再点亮anchor, 同时不再限制scroll事件函数里面滚动高亮的判断   setTimeout(() = {     forceStop.value = false;     time = null;  

    2024年02月06日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包