微信小程序实战之仿android fragment可滑动底部导航栏(4)
作者:michael_ouyang 发布时间:2023-07-02 16:22:38
标签:微信小程序,导航栏
底部3-5个选项的底部导航栏,目前在移动端上是主流布局之一,因此腾讯官方特地做了,可以通过设置,就可以做出了一个底部的导航栏。
相关教程:微信小程序教程系列之设置标题栏和导航栏(7)
但是通过设置的这个底部的导航栏,功能上比较固定,它必须要设置与它对应的一个页面,而且并不能滑动。
在业务上,有时候会比较限制,并不能完全满足所需。
又例如早前有人拿着UI稿问我,这种广告轮播图的样式,在小程序能不能实现呢?
我当时没有想了下,还不是很确定,因为小程序的轮播图的那几个小点点实在比较普通,样式单一。
因此特意写了一篇自定义轮播图的文章
链接:微信小程序实战之轮播图(3)
因此自定义就有这个必要性
下面介绍这个仿Android fragment可滑动的底部导航栏如何实现
项目最终效果图:
wxml:
<swiper current="{{currentTab}}" class="swiper-box" duration="300" style="height:{{winHeight - 51}}px" bindchange="bindChange">
<!-- frag01 -->
<swiper-item>
<scroll-view class="hot-box" scroll-y="true" upper-threshold="50" lower-threshold="100" bindscrolltolower="scrolltolower">
<!-- 列表 -->
<view class="themes-list">
<view class="themes-list-box" wx:for="{{datalists}}">
<view class="themes-list-main">
<view class="themes-list-name">{{item}}</view>
</view>
</view>
</view>
</scroll-view>
</swiper-item>
<!-- grag02 -->
<swiper-item>
<scroll-view class="hot-box" scroll-y="true" upper-threshold="50" lower-threshold="100" bindscrolltolower="scrolltolower">
<!-- 列表 -->
<view class="themes-list">
<view class="themes-list-box" wx:for="{{reslists}}">
<view class="themes-list-main">
<view class="themes-list-name">{{item}}</view>
</view>
</view>
</view>
</scroll-view>
</swiper-item>
<!-- grag03 -->
<swiper-item>
<scroll-view class="hot-box" scroll-y="true" upper-threshold="50" lower-threshold="100" bindscrolltolower="scrolltolower">
<!-- 列表 -->
<view class="themes-list">
<view class="themes-list-box" wx:for="{{datalists}}">
<view class="themes-list-main">
<view class="themes-list-name">{{item}}</view>
</view>
</view>
</view>
</scroll-view>
</swiper-item>
<!-- grag02 -->
<swiper-item>
<scroll-view class="hot-box" scroll-y="true" upper-threshold="50" lower-threshold="100" bindscrolltolower="scrolltolower">
<!-- 列表 -->
<view class="themes-list">
<view class="themes-list-box" wx:for="{{reslists}}">
<view class="themes-list-main">
<view class="themes-list-name">{{item}}</view>
</view>
</view>
</view>
</scroll-view>
</swiper-item>
</swiper>
<!--tab_top-->
<view class="swiper-tab">
<view class="swiper-tab-list {{currentTab==0 ? 'active' : ''}}" data-current="0" bindtap="swichNav">
<view class="swiper-tab-img"><image class="img" src="{{currentTab==0 ? iconlists[0].focus: iconlists[0].normal}}"></image></view>
<view>frag01</view>
</view>
<view class="swiper-tab-list {{currentTab==1 ? 'active' : ''}}" data-current="1" bindtap="swichNav">
<view class="swiper-tab-img"><image class="img" src="{{currentTab==1 ? iconlists[1].focus: iconlists[1].normal}}"></image></view>
<view>frag02</view>
</view>
<view class="swiper-tab-list {{currentTab==2 ? 'active' : ''}}" data-current="2" bindtap="swichNav">
<view class="swiper-tab-img"><image class="img" src="{{currentTab==2 ? iconlists[2].focus: iconlists[2].normal}}"></image></view>
<view>frag03</view>
</view>
<view class="swiper-tab-list {{currentTab==3 ? 'active' : ''}}" data-current="3" bindtap="swichNav">
<view class="swiper-tab-img"><image class="img" src="{{currentTab==3 ? iconlists[3].focus: iconlists[3].normal}}"></image></view>
<view>frag04</view>
</view>
</view>
wxss:
/*swiper*/
.swiper-box {
display: block;
height: 100%;
width: 100%;
overflow: hidden;
}
.hot-box {
display: block;
height: 100%;
font-family: Helvetica;
}
/* list */
.themes-list {
background: #fff;
display: block;
margin-bottom: 20px;
}
.themes-list-box {
display: block;
position: relative;
padding: 16px 20px;
border-bottom: 1px solid #f2f2f2;
}
.themes-list-main {
margin-left: 1px;
}
.themes-list-name {
font-size: 14px;
color: #444;
height: 20px;
line-height: 20px;
overflow: hidden;
}
/*tab*/
.swiper-tab {
height: 50px;
background: #fff;
display: flex;
position: relative;
z-index: 2;
flex-direction: row;
justify-content: center;
align-items: center;
border-top: 1px solid #ccc;
}
.swiper-tab-list {
margin: 0 20px;
padding: 0 4px;
font-size: 28rpx;
font-family: Helvetica;
}
.active {
/*border-bottom: 1px solid #FFCC00;*/
color: #FFCC00;
}
.swiper-tab-img {
text-align: center;
}
.img {
width:23px;
height: 23px;
}
js:
Page( {
data: {
winWidth: 0,
winHeight: 0,
currentTab: 0,
datalists : [
" * 主持中央财经领导小组第十五次会议",
" * 打叉的“万里审批图”成历史",
"新疆自治区举行 * 维稳誓师大会",
"朝鲜代表团抵达马来西亚处理金正男遇害案",
" * 主持中央财经领导小组第十五次会议",
" * 打叉的“万里审批图”成历史",
"新疆自治区举行 * 维稳誓师大会",
"砸锅卖铁!索尼是在走向毁灭 还是在奔向新生?"
],
reslists:["hello","thank you for your read","if u feel good","can u give me good?"],
iconlists:[
{normal:"../../images/wp.png",focus:"../../images/wpselect.png"},
{normal:"../../images/ss.png",focus:"../../images/ssselect.png"},
{normal:"../../images/hc.png",focus:"../../images/hcselect.png"},
{normal:"../../images/my.png",focus:"../../images/myselect.png"},
]
},
onLoad: function( options ) {
var that = this;
//获取系统信息
wx.getSystemInfo( {
success: function( res ) {
that.setData( {
winWidth: res.windowWidth,
winHeight: res.windowHeight
});
}
});
},
/**
* 滑动切换tab
*/
bindChange: function( e ) {
var that = this;
that.setData( { currentTab: e.detail.current });
},
/**
* 点击切换tab
*/
swichNav: function( e ) {
console.log(e)
var that = this;
if( this.data.currentTab === e.currentTarget.dataset.current ) {
//点击的是同一个,则不操作
return false;
} else {
that.setData( {
currentTab: e.currentTarget.dataset.current
})
}
}
})
来源:http://blog.csdn.net/michael_ouyang/article/details/60333699
0
投稿
猜你喜欢
- 很多时候,由于程序设计需要,要求在asp的include包含文件里调用动态的文件。如<!--#include file=&q
- 99bill: 1.md5.asp 代码如下:<% '''''''&
- 这个是升级的版本,比较进阶一点的,相对与之前的文件管理系统,数据只是存储到了内存中,而不是存储到硬盘上,我们想让文件存储到硬盘上的话,一个是
- Python异常是在程序执行时发生的错误,可能会导致程序终止运行。在Python中,异常处理是一种机制,它允许开发人员在程序发生异常时捕获、
- 目录1. 单变量 :=2. 多变量 :=3. 小结:=??Go 语言中 = 和 := 有什么区别1. 单变量 :=Go 语言中新增了一个特殊
- 在一测试服务器(CentOS Linux release 7.2.1511)上安装MySQL 5.6(5.6.19 MySQL Commun
- 不少需要用到sql2005的程序,有很多新手还是会操作,这里写个详细的图文教程送个菜鸟们,高手请飘过。适用于独立主机的朋友使用,如果你还没安
- 一、创建生成器通过列表⽣成式,我们可以直接创建⼀个列表。但是,受到内存限制,列表容量肯定是有限的。⽽且,创建⼀个包含100万个元素的列表,不
- 一般来说,造成MySQL出现中文乱码的因素主要有下列几点:1.server本身字符集设定的问题,例如还停留在latin12.table的语系
- 经常存在在我们的电脑中的垃圾文件主要是指系统在运行过程中产生的tmp临时文件、日志文件、临时备份文件等。垃圾清理器的作用其实也是对这些文件进
- 在页面中使用window全局变量main.js中定义:window.xxx=[];在data中定义:data() {? ? return {
- 两个例子package main import ( "fmt" "time")func Proces
- 前言 在网上爬取的小视频(.ts格式)打不开怎么搞?使用IDM下载有时候还会出现数据受法律保护,IDM无法下载该内容,如何解决?这篇博客就
- 数组编程使用Numpy数组可以使你利用简单的数组表达式完成多项数据操作任务,而不需要编写大量的循环,这个极大的帮助了我们高效的解决问题。我们
- WeTest 导读小程序科普类的文章已经很多了,今天这里讲的是针对小程序的优化方法,可以有效提高小程序的响应速度和用户体验。当然,开发体验也
- 写出能用的代码很简单,写出好用的代码很难。好用的代码,也都会遵循一此原则,这就是设计原则,它们分别是:单一职责原则 (SRP)开闭原则 (O
- 如下所示:# 导入模块import win32guiwin = win32gui.FindWindow(None, u'张三'
- 问题:在论坛发表回复时出现“The table is full”的提示,字面意义上是数据表已满的意思。因为很少有开发者遭遇单一表超过4G的情
- 主键表的主键(primary key,主关键字)是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录。一个表不能有多个主关键字,并且
- Conv2d的简单使用torch 包 nn 中 Conv2d 的用法与 tensorflow 中类似,但不完全一样。在 torch 中,Co