微信小程序实战之仿android fragment可滑动底部导航栏(4)

底部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
   })
  } 

 }
}) 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 使用Fragment模仿微信界面的实例代码

    什么是Fragment 自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片.片段.其目的是为了解决不同屏幕分辩率的动态和灵活UI设计.大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments . fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activit

  • Android Fragment+FragmentTabHost组件实现常见主页面(仿微信新浪)

    采取的方法是Fragment+FragmentTabHost组件来实现这种常见的app主页面的效果 首先给出main.xml文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"

  • android 中viewpager+fragment仿微信底部TAG完美渐变

    viewpager+fragment仿微信底部TAG完美渐变,在图片渐变的同时字的颜色也在变,注意,是渐变哦! 效果图: activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:zhy="http://schemas.android.com/apk/res/com.Sing.weixin" xmlns:tools="

  • 微信小程序实战之仿android fragment可滑动底部导航栏(4)

    底部3-5个选项的底部导航栏,目前在移动端上是主流布局之一,因此腾讯官方特地做了,可以通过设置,就可以做出了一个底部的导航栏. 相关教程:微信小程序教程系列之设置标题栏和导航栏(7) 但是通过设置的这个底部的导航栏,功能上比较固定,它必须要设置与它对应的一个页面,而且并不能滑动. 在业务上,有时候会比较限制,并不能完全满足所需. 又例如早前有人拿着UI稿问我,这种广告轮播图的样式,在小程序能不能实现呢? 我当时没有想了下,还不是很确定,因为小程序的轮播图的那几个小点点实在比较普通,样式单一. 因

  • 微信小程序 实战程序简易新闻的制作

    微信小程序 实战项目: 简易新闻制作 先看下效果: 实现思路数据全部是采用的本地数据,图片也是本地图片,因为苦逼的个人开发者,无法认证:toolbar四个现象:新闻,笑话,历史上的今天和主页,集中主页采用的是默认的页面,添加自己的一些内容:数据绑定,列表渲染,条件渲染和事件的使用:使用一些基础的View和text,部分API的使用: 代码结构 目录 用途 images 存放本地图片 pages 存放页面,history历史上的今天,index主页,joke笑话,news新闻 utils 工具包

  • 微信小程序实战之打卡时钟的绘制

    目录 一.项目展示 二.首页 三.设置 一.项目展示 这是一款简单实用的小时钟工具 分为工作和休息两种状态 用户可以设置相应的时间 所有的时钟记录都会被保存下来 二.首页 首页由计时器.任务输入框和两个计时按钮组成 <view class="container timer {{isRuning ? 'timer--runing': ''}}"> <view class="timer_main"> <view class="ti

  • 微信小程序实战之双人五子棋游戏是实现

    目录 一.项目展示 二.项目核心代码 三.效果展示 一.项目展示 微信小程序项目实例——双人五子棋 双人五子棋是一款游戏小程序 两位选手可以在15x15的棋盘上 进行五子棋竞技 同时小程序设置了悔棋功能 二.项目核心代码 点击落子 step: function(event) { var pos=event.currentTarget.dataset.pos; wx.setStorageSync('vak', this.data.vak); if(this.data.vak[pos]=="whit

  • 微信小程序实战项目之富文本编辑器实现

    目录 前言 1. 实现效果 2. 创建发布页面,实现基本布局 3. 实现编辑区操作栏的功能 3.1. 实现文本加粗.斜体.文本下划线.左对齐.居中对齐.右对齐 3.2. 实现撤销.恢复.插入图片.删除操作 4. 参考 总结 前言 这是我参加掘金启航计划的第三篇文章,这次总结的是实现一个简单的富文本编辑器,相信阅读文章后,观众老爷们,能够实现富文本编辑器,在微信小程序中发布自己的文章,希望观众老爷们多多支持! 1. 实现效果 实现的效果如下图: 实现的功能点如下: 文本加粗.斜体.下划线,对齐方式

  • 微信小程序实现的点击按钮 弹出底部上拉菜单功能示例

    本文实例讲述了微信小程序实现的点击按钮 弹出底部上拉菜单功能.分享给大家供大家参考,具体如下: index.wxml <button type="default" bindtap="actionSheetTap">弹出action sheet</button> <action-sheet hidden="{{actionSheetHidden}}" bindchange="actionSheetbindch

  • android中Fragment+RadioButton实现底部导航栏

    在App中经常看到这样的tab底部导航栏 那么这种效果是如何实现,实现的方式有很多种,最常见的就是使用Fragment+RadioButton去实现.下面我们来写一个例子 首先我们先在activity_mian.xml定义布局,整个布局的外面是线性布局,上面是帧布局切换不同的Fragment,底下是RadioGroup嵌套的是RadioButton.代码如下所示: <?xml version="1.0" encoding="utf-8"?> <Li

  • 解决android 显示内容被底部导航栏遮挡的问题

    描述: 由于产品需求,要求含有EditText的界面全屏显示,最好的解决方式是使用AndroidBug5497Workaround.assistActivity(this) 的方式来解决,但是华为和魅族手机系统自带的有底部导航栏,会造成一些布局被遮挡. 解决方案:在values-21的style.xml中添加android:windowDrawsSystemBarBackgrounds"并将值设置为false,方式如下 在style引用的主题里面加入android:windowDrawsSyst

  • Android开发快速实现底部导航栏示例

    目录 Tint 着色器 依赖(AndroidX) 布局 编写渲染颜色选择器-tint_selector_menu_color menu 文件中 icon-nav_bottom_menu BottomNavigationView的点击事件 配合ViewPager实现Tab栏 对应的适配器 Tint 着色器 优点:去除“无用”图片,节省空间 配合BottomNavigationView,实现一个快速,简洁的Tab栏 传统做法:Tab 切换,字体变色.图片变色.至少给我提供八张图,四张默认,四张选中,

  • 微信小程序实战之自定义模态弹窗(8)

    首先看看官方提供的模态弹窗,供大家参考,具体内容如下 api如下: 示例: 这样的模态弹窗,充其量只能做个alert,提示一下信息. 但是并不能使用它来处理复杂性的弹窗业务,因此写了Michael从新自定义了一个,采用了仿原生的样式写法 wxml: <!--button--> <view class="btn" bindtap="powerDrawer" data-statu="open">button</view&

随机推荐