zoukankan      html  css  js  c++  java
  • 微信小程序选项卡之跳转

      时隔一个月之久今天再聊聊小程序吧,选项卡是在PC以及移动端经常使用的,这次在开发小程序的过程中一个选项卡可把我难住了,今天咱们就来说一下。

    大多数的商城类小程序都有这个功能,点击“全部订单”,“待付款”,“待发货”,“待收货”,“已完成”,会跳转页面且跳至与之相对应的选项卡中。所以我们在开发该小程序时也做了相同的功能。如下图:


     
     

    选项卡静态布局思路: 主要用到 scroll-viewswiper标签,选项卡切换主要依靠 swiper 中的 current 属性,不懂请自行查看小程序API。
    跳转页面且跳至与之相对应的选项卡思路:
    首先在 app.js 中配置 globalData
    在“个人中心” js 文件中配置点击该项跳转至与之对应的 tab 的 index。
    在“个人中心”跳转页面时通过 globalData 传递 index 给“全部订单”页面,“全部订单”页面通过 app.globalData.currentLocation 接受数据,改变选项卡的切换。

    app.js 代码

      globalData: {
        userInfo: null
      }
    

    个人中心 wxml 代码

    <!--九宫格  -->
    <view class="page">
      <view class="page__bd">
        <view class="weui-grids">
          <view class="allrec" bindtap="allForm">
              <text>我的订单</text>
              <view class="more">查看更多订单</view>
              <image class='moreImg' src='../../img/more.png'></image>
          </view>
          <!--待付款  -->
          <view class="weui-grid" hover-class="weui-grid_active" bindtap="noPay">
            <image class="weui-grid__icon" src="../../img/wallet.png" />
            <view class="weui-badge" hidden="{{false}}">{{badgeNum1}}</view>
            <view class="weui-grid__label label">待付款</view>
          </view>
    
          <!--待发货  -->  
          <view class="weui-grid" hover-class="weui-grid_active" bindtap="noSend">
            <image class="weui-grid__icon" src="../../img/wallet-1.png" />
            <view class="weui-badge" hidden="{{false}}">{{badgeNum1}}</view>
            <view class="weui-grid__label label">待发货</view>
          </view>
    
          <!--已发货  -->
          <view class="weui-grid" hover-class="weui-grid_active" bindtap="sended">
            <image class="weui-grid__icon" src="../../img/wallet-2.png" />
            <view class="weui-badge" hidden="{{false}}">{{badgeNum1}}</view>
            <view class="weui-grid__label label">待收货</view>
          </view>
    
          <!--已完成  -->
          <view class="weui-grid" hover-class="weui-grid_active" bindtap="completed">
            <image class="weui-grid__icon" src="../../img/wallet-3.png" />
            <view class="weui-grid__label label">已完成</view>
          </view>
        </view>
      </view>
    </view>
    

    个人中心 js 代码

    var app = getApp()
    var util = require('../../utils/util.js')
    var formatLocation = util.formatLocation
    
    Page({
      data: {
      },
      // 指定 全部订单 和 九宫格中按钮 点击跳转至 选项卡中 与之对应的tab
      allForm:function(){
        app.globalData.currentLocation = 0,
        wx.navigateTo({ url: '../orderForm/orderForm' }) 
      },
      noPay:function(){
        app.globalData.currentLocation = 1,
        wx.navigateTo({ url: '../orderForm/orderForm' })  
      },
      noSend:function(){
        app.globalData.currentLocation = 2,
        wx.navigateTo({ url: '../orderForm/orderForm' }) 
      },
      sended:function(){
        app.globalData.currentLocation = 3,
        wx.navigateTo({ url: '../orderForm/orderForm' }) 
      },
      completed:function(){
        app.globalData.currentLocation = 4,
        wx.navigateTo({ url: '../orderForm/orderForm' }) 
      }
    })
    
    

    个人中心 wxss 代码 (样式可能会不全,需要引入weui.wxss文件)

    /*九宫格  */
    .weui-grids{
      border-left: none;
    }
    .weui-grid{
       25%;
      border: none;
      position: relative;
      padding:20px 10px 10px;
    }
    .weui-grid .weui-badge{
     12rpx;
    height: 28rpx;
    border-radius: 50%;
      position: absolute;
      right: 40rpx;
      top: 20rpx;
      background: #df0202;
    }
    
    
    /* list  */
    .weui-cell__hd{
      margin-right: 30rpx;
      vertical-align: middle;
      20px;
      height: 20px;
    }
    .weui-cell__hd image{
       50rpx;
      height: 50rpx;
    }
    .weui-cell__ft{
      color: #fff;
      background: #dd3838;
      border-radius: 20rpx;
      text-align: center;
      margin-right: 10rpx;
      padding: 0 5rpx;
    }
    .all{
        font-size: 30rpx;
    }
    

    全部订单 wxml 代码

    <!--全部订单页  -->
      <!--选项卡标题  -->
    
    <scroll-view scroll-x="true" bindscroll="scroll" class="scroll-view_H list-liu">
      <view class="scroll-view-item_H swiper-tab-list {{currentTab==0?'on':''}}" data-current="0" bindtap="swichNav" hover-class="eee">全部</view>
      <view class="scroll-view-item_H swiper-tab-list {{currentTab==1?'on':''}}" data-current="1" bindtap="swichNav" hover-class="eee">待付款</view>
      <view class="scroll-view-item_H swiper-tab-list {{currentTab==2?'on':''}}" data-current="2" bindtap="swichNav" hover-class="eee">待发货</view>
      <view class="scroll-view-item_H swiper-tab-list {{currentTab==3?'on':''}}" data-current="3" bindtap="swichNav" hover-class="eee">已发货</view>
      <view class="scroll-view-item_H swiper-tab-list {{currentTab==4?'on':''}}" data-current="4" bindtap="swichNav" hover-class="eee">已完成</view>
    </scroll-view>
      
    <!-- 选项卡内容 -->
    <swiper current="{{currentTab}}" class="swiper-box" duration="300" bindchange="bindChange" style="height:{{clientHeight?clientHeight+'px':'auto'}}">  
        <!-- 全部订单 内容 --> 
      <swiper-item>  
        <scroll-view scroll-y="{{true}}" style="height: {{clientHeight?clientHeight+'px':'auto'}}">
          <view class="kong"></view>
          <!--写入显示内容  -->
          <view class="list" wx:for="{{carts}}" wx:key="*this">
            <!-- 图片 -->
            <view class="pic">
              <image src="{{item.imgurl}}"></image>
            </view>
            <!-- 类型表述 -->
            <view class="con">
              <text class="type1">{{item.type1}}</text>
              <text class="type2">{{item.type2}}</text>
            </view>
            <!-- 价格 -->
            <view class="price">
              <text class="price1">¥{{item.price}}</text>
              <text class="number">×{{item.num}}</text>
            </view>
          </view>
        </scroll-view>
      </swiper-item>  
        <!-- 待付款 内容 --> 
      <swiper-item>  
        <scroll-view scroll-y="{{true}}" style="height: {{clientHeight?clientHeight+'px':'auto'}}">
          <view class="kong"></view>
          <!--写入显示内容  -->
          <view class="list" wx:for="{{carts}}" wx:key="*this">
            <!-- 图片 -->
            <view class="pic">
              <image src="{{item.imgurl}}"></image>
            </view>
            <!-- 类型表述 -->
            <view class="con">
              <text class="type1">{{item.type1}}</text>
              <text class="type2">{{item.type2}}</text>
            </view>
            <!-- 价格 -->
            <view class="price">
              <text class="price1">¥{{item.price}}</text>
              <text class="number">×{{item.num}}</text>
            </view>
          </view>
        </scroll-view>
      </swiper-item>  
        <!-- 待发货 内容 -->
      <swiper-item>  
        <scroll-view scroll-y="{{true}}" style="height: {{clientHeight?clientHeight+'px':'auto'}}">
          <view class="kong"></view>
          <!--写入显示内容  -->
          
          <view class="list" wx:for="{{carts}}" wx:key="*this">
            <!-- 图片 -->
            <view class="pic">
              <image src="{{item.imgurl}}"></image>
            </view>
            <!-- 类型表述 -->
            <view class="con">
              <text class="type1">{{item.type1}}</text>
              <text class="type2">{{item.type2}}</text>
            </view>
            <!-- 价格 -->
            <view class="price">
              <text class="price1">¥{{item.price}}</text>
              <text class="number">×{{item.num}}</text>
            </view>
          </view>
        </scroll-view>
      </swiper-item>  
        <!-- 已发货 内容 -->
      <swiper-item>  
        <scroll-view scroll-y="{{true}}" style="height: {{clientHeight?clientHeight+'px':'auto'}}">
          <view class="kong"></view>
          <!--写入显示内容  -->
          <view class="list" wx:for="{{carts}}" wx:key="*this">
            <!-- 图片 -->
            <view class="pic">
              <image src="{{item.imgurl}}"></image>
            </view>
            <!-- 类型表述 -->
            <view class="con">
              <text class="type1">{{item.type1}}</text>
              <text class="type2">{{item.type2}}</text>
            </view>
            <!-- 价格 -->
            <view class="price">
              <text class="price1">¥{{item.price}}</text>
              <text class="number">×{{item.num}}</text>
            </view>
          </view>
        </scroll-view>
      </swiper-item> 
        <!-- 已完成 内容 -->
      <swiper-item>  
        <scroll-view scroll-y="{{true}}" style="height: {{clientHeight?clientHeight+'px':'auto'}}">
          <view class="kong"></view>
          <!--写入显示内容  -->
          <view class="list" wx:for="{{carts}}" wx:key="*this">
            <!-- 图片 -->
            <view class="pic">
              <image src="{{item.imgurl}}"></image>
            </view>
            <!-- 类型表述 -->
            <view class="con">
              <text class="type1">{{item.type1}}</text>
              <text class="type2">{{item.type2}}</text>
            </view>
            <!-- 价格 -->
            <view class="price">
              <text class="price1">¥{{item.price}}</text>
              <text class="number">×{{item.num}}</text>
            </view>
          </view>
        </scroll-view>
      </swiper-item> 
    </swiper>  
    

    全部订单 js 代码

    // 全部订单页
    
    //获取应用实例
    var app = getApp()
    Page({
      /*** 页面的初始数据 */
      data: {
        // 选项卡
        winWidth: 0,
        winHeight: 0,
        // tab切换  
        currentTab: 0, 
        // 商品内容数据
        carts: [
          { imgurl: '../../img/fen-2.jpg', type1: '【老酒特卖】45℃老白汾十年陈酿500ML(2008-2009)', type2: '清香型', price: 100, num: 1 }, 
          { imgurl: '../../img/fen-1.jpg', type1: '【老酒特卖】45℃老白汾十年陈酿500ML(2008-2009)', type2: '清香型', price: 100, num: 1 },
          { imgurl: '../../img/fen-2.jpg', type1: '【老酒特卖】45℃老白汾十年陈酿500ML(2008-2009)', type2: '清香型', price: 100, num: 1 },
          { imgurl: '../../img/fen-1.jpg', type1: '【老酒特卖】45℃老白汾十年陈酿500ML(2008-2009)', type2: '清香型', price: 100, num: 1 },
        ],
      },
      /** * 滑动切换tab  */
      bindChange: function (e) {
        var that = this;
        that.setData({ currentTab: e.detail.current });
      },
      /** * 点击tab切换  */
      swichNav: function (e) {
        var that = this;
        if (this.data.currentTab === e.target.dataset.current) {
          return false;
        } else {
          that.setData({
            currentTab: e.target.dataset.current
          })
        }
      },
      /*** 生命周期函数--监听页面加载*/
      onLoad: function (options) {
        var that = this;
        /** * 获取系统信息  */
        wx.getSystemInfo({
          success: function (res) {
            that.setData({
              clientHeight: res.windowHeight
            });
          }
        });
      },
      /*** 生命周期函数--监听页面显示*/
      onShow: function () {
        if (app.globalData.currentLocation == '') {
          this.setData({
            currentTab: 0
          });
        } else {
          var i = app.globalData.currentLocation;
          this.setData({
            currentTab: i
          });
        }
      }
    })
    

    全部订单 wxss 代码

    .scroll-view_H{
      white-space: nowrap;
    }
    .scroll-view-item_H{
      display: inline-block;
       20%;
      box-sizing: border-box;
    }
    .list-liu{
       100%;
      height: 85rpx;
      position: fixed;
      left: 0;
      top: 0;
      z-index: 1;
      background: #fff;
      border: 1rpx solid #eee;
    }
    .on{
      color: #c80611;
    }
    .list-liu .swiper-tab-list{
      text-align: center;
      line-height: 85rpx;
      font-size: 34rpx;
    }
    .kong{
       100%;
      height: 85rpx;
    }
    /*----------------------分割线-------------------  */
    /*购物车 全部订单 我的收藏 浏览记录 样式  */
    /* 列表 */
    .list{ 100%;background: #fff;margin-top:20rpx;display: flex;box-sizing: border-box;padding:10rpx 30rpx 10rpx 30rpx ;border-bottom: 1px solid #eee}
    .carts-radio{flex: 1;line-height: 180rpx;text-align: center}/* 选项框 */
    .pic{flex: 3;height: 180rpx;}
    .pic image{ 100%;height: 100%;}
    .con{flex: 6;padding-left: 20rpx;padding-bottom: 20rpx;box-sizing: border-box}
    view,text,block{
        font-family: "Microsoft Yahei"
    }
    /* 类型描述 */
    .type1{
      padding-top: 10rpx;
      display: block;
      font-size: 30rpx;
      color: #323232;
      100%;
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp:2;
      -webkit-box-orient: vertical;
    }
     .type2{
       display: flex;
      font-size: 28rpx;
      color: #666;
      100%;
      padding-top: 20rpx;box-sizing: border-box
    }
    
    
    /* 数量 */
    .num{
       140rpx;
      height: 40rpx;
      border: 1px solid #eee;
      margin-top: 15rpx;
      background: #fff
    } 
    .num2{
      float: left;
       56rpx;
      line-height: 40rpx;
      text-align: center;
     font-size: 28rpx;
     color: #666666
    }
    .num1{float: left;
     40rpx;
    height: 40rpx;
    line-height: 40rpx;
    text-align: center;
    font-size: 36rpx;
    padding: 0;
    color: #4a4949;
    border-right: 1px solid #eee;
    }
    .num3{
    float: right;
     40rpx;
    height: 40rpx;
    line-height: 40rpx;
    text-align: center;
    font-size: 36rpx;
    padding: 0;
    margin: 0;
    border-radius: 0px;
    color: #4a4949;
    border-left: 1px solid #eee;
    } 
    
    /* 价格 */
    .price{flex: 3;font-size: 30rpx;color: #c90211;box-sizing: border-box;position: relative}
     .price1{position: absolute;right: 0;top: 0}
     .number{position: absolute;right: 0;top: 40rpx}
    
    /* 删除 */
    .del{ 50rpx;height: 50rpx;position: absolute;right: 0;bottom: 20rpx}
    
    /*----------------------分割线-------------------  */
    /**app.wxss**/
    .container {
      height: 100%;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: space-between;
      padding: 200rpx 0;
      box-sizing: border-box;
    } 
    /*----------------------分割线-------------------  */
    /*首页商品类样式  */
    .content{
      display: flex;
      flex-wrap:  wrap;
    }
    .content-1{
       375rpx;
      /* height: 420rpx; */
      padding:20rpx 10rpx ;
      box-sizing: border-box;
      border-bottom: 2rpx solid #cccccc;
      border-right: 1rpx solid #cccccc;
    }
    .content-1 image{
       374rpx;
      height: 252rpx;
      margin-left: -8rpx;
    }
    .content-1 .price .text-price{
      color: #b20000;
      font-size: 32rpx;
      font-weight: bold;
    }
    .content-1 .price .text-yj{
      color: #656565;
      font-size: 24rpx;
    }
    .content-1 .price .text-oldprice{
      text-decoration: line-through;
      color: #656565;
      font-size: 24rpx;
    }
    .content-1 .name .text-name{
      font-size: 28rpx;
      color: #323232;
    }
    .content-1 .dress{
      margin-top: 10rpx;
    }
    .content-1 .dress .dress-1{
      float: left;
      color: #989898;
      font-size: 24rpx;
    }
    .content-1 .dress .dress-2{
      float: right;
      color: #989898;
      font-size: 24rpx;
      margin-right: 20rpx;
    }
    
  • 相关阅读:
    PhpExcel笔记,phpExcel中文帮助手册
    mysql “group by ”与"order by"的研究--分类中最新的内容
    mysql中,主键与普通索引
    mysql性能优化-慢查询分析、优化索引和配置
    OpenSSL
    HAProxy
    Lighttpd
    Linux find/grep命令
    keepalived
    iptables
  • 原文地址:https://www.cnblogs.com/changk/p/9236116.html
Copyright © 2011-2022 走看看