先上一个效果图:



根据这个效果图我来说内容。

首先是顶部tab栏

效果实现依靠的是一个组件scroll-view。这个组件很有意思,可以多层嵌套,当然它的属性也很多。

这里主要用的是scroll-x,scroll-x的默认值是false,我们要设置为true。这一步我们仅仅是实现了可以左右滑动。

更重要的是如何判断滑动到了哪个位置,怎么获取对应内容。滑动距离由于我们是左右滑动所以这里是scroll-left,给scroll-left动态赋值。

这里我先上代码

<scroll-view scroll-x="true" class="tab-h" scroll-left="{{scrollLeft}}">
<view class="tab-item {{currentTab==0?'active':''}}" data-current="0" bindtap="swichNav">请假</view>
<view class="tab-item {{currentTab==1?'active':''}}" data-current="1" bindtap="swichNav">离职</view>
<view class="tab-item {{currentTab==2?'active':''}}" data-current="2" bindtap="swichNav">部门</view>
<view class="tab-item {{currentTab==3?'active':''}}" data-current="3" bindtap="swichNav">员工</view>
<view class="tab-item {{currentTab==4?'active':''}}" data-current="4" bindtap="swichNav">事项</view>
<view class="tab-item {{currentTab==5?'active':''}}" data-current="5" bindtap="swichNav">消息</view>
<view class="tab-item {{currentTab==6?'active':''}}" data-current="6" bindtap="swichNav">设置</view>
</scroll-view>

样式上我们用 {{currentTab==6?‘active’:’’}},这是一个三目运算,做逻辑判断的。相应的就要给current设置对应的序号,就是data-current的内容。除了滑动事件外,我们还需要加一个点击事件bindtap=“swichNav”。因为你不可能只用滑动显示的吧。

好了接下来看看JS中如何配置

这是在公共data{}存贮的内容,供给页面和函数来调用

interval: 5000,
duration: 500,
currentTab: 0, //预设当前项的值
scrollLeft: 0, //tab标题的滚动条位置

函数中这样来写,如果我们只有一屏的宽度内容滚动, this.checkCor();就用不到了。但是如果像示例图那样很多,我们还要判断超出一屏的宽度后要左移多少距离来显示后面的tab项,也就是scrollLeft给一个宽度值。

// 滚动切换标签样式
switchTab: function(e) {
this.setData({
currentTab: e.detail.current
});
this.checkCor();
},
// 点击标题切换当前页时改变样式
swichNav: function(e) {
var cur = e.target.dataset.current; //查询标题序号
if (this.data.currentTaB == cur) {
return false;
} else {
this.setData({
currentTab: cur
})
}
},
//判断当前滚动超过一屏时,设置tab标题滚动条。
checkCor: function() {
if (this.data.currentTab > 4) {
this.setData({
scrollLeft: 300
})
} else {
this.setData({
scrollLeft: 0
})
}
},

这样简单的顶部tab滑动效果就出来了。附上样式:

/*顶部切换*/

.tab-h {
height: 80rpx;
width: 100%;
box-sizing: border-box;
overflow: hidden;
line-height: 80rpx;
background: #f7f7f7;
font-size: 16px;
white-space: nowrap;
position: fixed;
top: 0;
left: 0;
z-index: 99;
} .tab-item {
margin: 0 36rpx;
display: inline-block;
} .tab-item.active {
color: #4675f9;
position: relative;
} .tab-item.active:after {
content: "";
display: block;
height: 8rpx;
width: 54rpx;
background: #4675f9;
position: absolute;
bottom: 0;
left: 5rpx;
border-radius: 16rpx;
}

接着说侧边栏点击

侧边栏效果图

就想购物商城的分类点击一样。这里主要用到的就是官方的框架:数据绑定、列表渲染、条件渲染

具体在代码中是这样用到的:

<!--主盒子-->
<view class="containers">
<!--左侧栏-->
<view class="nav_left">
<block wx:for="{{cateItems}}" wx:key="">
<view class="nav_left_items {{curNav == item.cate_id ? 'active' : ''}}" bindtap="switchRightTab" data-index="{{index}}" data-id="{{item.cate_id}}">{{item.cate_name}}</view>
</block>
</view>
<!--右侧栏-->
<view class="nav_right">
<!--如果有数据,才遍历项-->
<view wx:if="{{cateItems[curIndex].ishaveChild}}">
<block wx:for="{{cateItems[curIndex].children}}" wx:key="">
<view class="nav_right_items">
<!--界面跳转 -->
<navigator url="">
<image src="{{item.image}}"></image>
<text>{{item.name}}</text>
</navigator>
</view>
</block>
</view>
<!--如果无数据,则显示数据-->
<view class="nodata_text" wx:else>该分类暂无数据</view>
</view>
</view>

左侧是一个部分,需要用列表渲染 wx:for="{{cateItems}}",将左侧的各个分类用一个列表展示出来,{{cateItems}}是一个数组。对应分类的点击添加样式我们仍然用三目运算判断{{curNav == item.cate_id ? ‘active’ : ‘’}}"。左侧分类的item我们写在JS中

cateItems: [{
cate_id: 1,
cate_name: "公共程序",
ishaveChild: true,
children:[{}]
},
{
cate_id: 2,
cate_name: "公共策划",
ishaveChild: true,
children:[{}]
},
{
cate_id: 3,
cate_name: "郑州项目",
ishaveChild: true,
children:[{}]
},
{
cate_id: 4,
cate_name: "成都项目",
ishaveChild: true,
children:[{}]
},
{
cate_id: 5,
cate_name: "三方客服",
ishaveChild: true,
children:[{}]
}
],
curNav: 1,
curIndex: 0,

这部分仍然是在公共data中实现,有人会说能否获取服务器内容来填充呢,当然可以实现,这就需要你请求接口,然后存贮data,道理是一样的。

可以看到在分类的item中都给了id值,这也是必须的一步,因为要确保点击对应的分类来实现显示对应的内容,添加对应的样式,所以给上id来排序号。

当然在代码中也要全部列出item的内容。

<view class="nav_left_items {{curNav == item.cate_id ? 'active' : ''}}" bindtap="switchRightTab" data-index="{{index}}" data-id="{{item.cate_id}}">{{item.cate_name}}</view>

对应的方法我们要在JS中配置出来:

//部门列表点击
switchRightTab: function(e) {
// 获取item项的id,和数组的下标值
let id = e.target.dataset.id,
index = parseInt(e.target.dataset.index);
// 把点击到的某一项,设为当前index
this.setData({
curNav: id,
curIndex: index
})
},

有了这个点击函数就可以展示对应的内容了。

还有一步我做简单说明:

 <view wx:if="{{cateItems[curIndex].ishaveChild}}">
<block wx:for="{{cateItems[curIndex].children}}" wx:key="">

这个列表渲染wx:if="{{cateItems[curIndex].ishaveChild}},就是判断当前分类是否被点击到,点击到ishaveChild的值是true的就展示对应的内容。wx:for="{{cateItems[curIndex].children}}",则是请求itemchildren内容。children也可以用请求服务器内容来实现,同样是把请求到的数据储存到本地,然后给页面渲染出来。

curNav: 1,
curIndex: 0,

这两个值是初始化内容,就是默认是列表的第一个内容优先展示。

好了本期就说这些,有不懂的可以留言。

小程序开发顶部TAB栏和侧边分类点击的更多相关文章

  1. 微信小程序开发——文本框种输入手机号,点击获取验证码无反应的处理方法

    异常描述: 如下图,输入手机号码之后,点击右侧的获取验证码,在开发工具是OK的,真机测试无反应: 页面编码跟H5差不多的,H5没出现这个问题,但是小程序就不一样了. 异常分析: 页面结构层面,为了方便 ...

  2. 小程序开发-页面导航栏navigation-bar组件

    导航栏navigation-bar 页面导航条配置节点,用于指定导航栏的一些属性.只能是 page-meta 组件内的第一个节点,需要配合它一同使用. 通过这个节点可以获得类似于调用 wx.setNa ...

  3. 微信小程序之顶部导航栏

    wxml: <!--导航条--><view class="navbar"> <text wx:for="{{navbar}}" d ...

  4. 微信小程序开发学习资料

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  5. 微信小程序开发之初探

    本文是以一个简单的小例子,来简要讲解微信小程序开发步骤,希望促进学习分享. 概念 微信小程序,简称小程序,缩写xcx,英文mini program.是一种不需要下载安装即可使用的应用,它实现了应用“触 ...

  6. 微信小程序开发环境安装以及相关设置配置

    微信小程序开发环境安装以及相关设置配置 一.安装 软件名称:wechat_devtools_1.02.1907232_x64 软件安装地址:https://developers.weixin.qq.c ...

  7. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  8. 【微信小程序开发】全局配置

    今天看看小程序全局配置. 上一篇[微信小程序开发]秒懂,架构及框架 配置,无非就是为了增加框架的灵活性,而定下的规则. 微信小程序的配置文件是一个树状结构,各个节点代表不同的配置项,小程序框架会解析这 ...

  9. 微信小程序-开发入门(一)

    微信小程序已经火了一段时间了,之前一直也在关注,就这半年的发展来看,相对原生APP大部分公司还是不愿意将主营业务放到微信平台上,以免受制于腾讯,不过就小程序的应用场景(用完即走和二维码分发等)还是很值 ...

随机推荐

  1. Python 之并发编程之进程下(事件(Event())、队列(Queue)、生产者与消费者模型、JoinableQueue)

    八:事件(Event()) # 阻塞事件:    e = Event() 生成事件对象e    e.wait() 动态给程序加阻塞,程序当中是否加阻塞完全取决于该对象中的is_set() [默认返回值 ...

  2. Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战

    Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战 说明:Java生鲜电商平台拼团是拉新引流的利器,将拼团运用到极致的就是拼多多,前期通过选取性价比高.实用性强的商品进行拼团,在社交圈(主要 ...

  3. 如何使用ffmpeg的c语言sdk实现对文件夹的操作

    重要函数 打开文件夹:avio_open_dir() 读取文件夹:avio_read_dir() 关闭文件夹:avio_close_dir() 结构体, 操作目录的上下文:AVIODirContext ...

  4. 《精通Objective-C》书籍目录

    1.入门 2.使用类 3.对象和消息传递 4.内存管理 5.预处理器 6.专家级技巧:使用ARC 7.运行时系统 8.运行时系统的结构 9.专家级技巧:使用运行时系统API 10.Foundation ...

  5. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:激活状态

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. Python 数据的输入

    一.单个输入 a=input("输入提示语句")#默认a的类型是字符串 b=input() 二.一行输入两个/三个数据,数据之间用空格间隔开 #a,b的数据类型都是整数 a,b=m ...

  7. python join 和setDaemon 简介

    Python多线程编程时,经常会用到join()和setDaemon()方法 1.join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等 ...

  8. 在网页中JS函数自动执行常用三种方法

    在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   function ...

  9. hadoop 第一个 mapreduce 程序(对MapReduce的几种固定代码的理解)

    1.2MapReduce 和 HDFS 是如何工作的 MapReduce 其实是两部分,先是 Map 过程,然后是 Reduce 过程.从词频计算来说,假设某个文件块里的一行文字是”Thisis a ...

  10. LoadRunner监控Linux系统

    需要下载3个包:  地址链接:链接:https://pan.baidu.com/s/1lltAa6JnjJ7Mr88duixUSQ 密码:5yiw(1)rsh-0.17-14.i386.rpm (2) ...