小程序顶部选项卡(实现效果,选中的元素居中显示

小程序顶部选项卡(实现效果,选中的元素居中显示

图中实现的效果是基于微信小程序提供的scroll-view组件实现的,用到的属性如下:

scroll-x(允许横向滚动)
scroll-left (设置横向滚动条位置)
scroll-with-animation (在设置滚动条位置时使用动画过渡)

实现的效果
在这里插入图片描述
wxml代码

<scroll-view class="tab_list" scroll-left="{{tabList[tabKey].tabLeft}}" scroll-with-animation="{{true}}" scroll-y="{{false}}" scroll-x="{{true}}" >
	<view class="pack" style="width:{{tabList.length * tabItemWidht}}px">
		<view wx:for="{{tabList}}" wx:key="key" wx:for-index="key" class="{{key == tabKey?'name cut_name':'name'}}" data-key="{{key}}" bindtap="tabOpt">{{item.name}}</view>
	</view>
</scroll-view>

wxss代码

.tab_list{position: relative; background-color: #ffffff;}
.tab_list .pack{display: flex; justify-content: space-between; flex-wrap: wrap;}
.tab_list .name{width: 78px; height: 48px; line-height: 48px; border-bottom: 2px #ffffff solid; text-align: center;}
.tab_list .cut_name{border-bottom: 2px #00ff00 solid; color: #00ff00; font-weight: bold;}
::-webkit-scrollbar{display: none;}

js代码

const app = getApp();
data:{
    screen: app.globalData, // 这里是当前屏幕的宽高,只是我在app.js中已经获取到了,所以这就直接调用了
    tabList:[{id:1,name:'标题'},{id:2,name:'标题1'},{id:3,name:'标题2'},{id:4,name:'标题3'},{id:5,name:'标题4'},{id:6,name:'标题5'},{id:7,name:'标题6'},{id:8,name:'标题7'},{id:9,name:'标题8'},{id:10,name:'标题9'},{id:11,name:'标题10'},{id:12,name:'标题11'},{id:12,name:'标题12'},{id:14,name:'标题13'},{id:15,name:'标题14'},{id:16,name:'标题15'},{id:17,name:'标题16'}], // 这是一个简单的数组里面内容自定义
    tabItemWidht: 80, // 这是每个元素块的宽度
    tabKey:2, // 当前选中元素的下标
},

onLoad(){
    this.setTabSite();
},

/* 选择元素 */
tabOpt(e){
    this.setData({tabKey: e.currentTarget.dataset.key});
  },

/* 重点是这段计算代码 */
setTabSite(){
	let list = this.data.tabList;
    let screen = this.data.screen.screenWidth / 2;
    let w = this.data.tabItemWidht;
    for(let i in list){
      if((i * w) <= screen){
        if(((Number(i) + 1) * w) >= screen) list[i].tabLeft = (((Number(i) + 1) * w) - screen + (w / 2) - w);
        else list[i].tabLeft = 0;
      }else{
        list[i].tabLeft = (i * w) - screen + (w / 2);
      }
    }
    this.setData({tabList: list});
},

最后总结一下我实现它的逻辑,我先拿到屏幕的宽度除以2,拿到了屏幕居中的位置,接下来开始循环列表,第一个if条件我拿到了小于等于屏幕居中位置的元素,第二个if条件我拿到了第一个条件中位于屏幕居中位置的元素。并给上对应的值。

补充:写的不好大佬勿喷,大佬勿喷,大佬勿喷,如果有好的建议或者方法请留言谢谢

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值