小程序自定义头部导航栏

摘要:
第一步:在app.json中设置目前微信小程序不支持单个页面设置,一旦决定要使用自定义导航栏后,那么每个页面都需要设置导航栏组件目录:index.wxml文件˂!',cancelColor:'#909399',confirmColor:'#3888FF',success:function{if{wx.navigateBack()}}})return;}wx.navigateBack()},//返回到首页_backhome(){wx.switchTab}}})app.js文件Appapp.wxss文件page{position:relative;z-index:9999998;}自此,导航栏组件已搭建完成,让我们来使用它吧在小程序页面中:index.wxml文件˂!

小程序自定义头部导航栏第1张

第一步:在app.json中设置

小程序自定义头部导航栏第2张

目前微信小程序不支持单个页面设置,一旦决定要使用自定义导航栏后,那么每个页面都需要设置

导航栏组件目录:

小程序自定义头部导航栏第3张

index.wxml 文件

<view class='nav-wrap' style='height: {{height*2 + 20}}px;'>
    <!--导航栏 中间的标题 -->
  <view class='nav-title' style='line-height: {{height*2 + 44}}px;'>{{navbarData.title}}</view>
  <view style='display: flex; justify-content: space-around;flex-direction: column'>
      <!--导航栏  左上角的返回按钮 和home按钮 -->
      <!--其中wx:if='{{navbarData.showCapsule}}' 是控制左上角按钮的显示隐藏,首页不显示 -->
    <view class='nav-capsule' style='height: {{height*2 + 44}}px;' wx:if='{{navbarData.showCapsule}}'>
       <!--左上角的返回按钮,wx:if='{{!share}}'空制返回按钮显示 -->
       <!--从分享进入小程序时 返回上一级按钮不应该存在 -->
      <view bindtap='_navback' wx:if='{{!share}}'>
        <image src='/common/image/nav-back.png' mode='aspectFit' class='back-pre'></image>
      </view>
      <!--<view   wx:if='{{share}}'></view> -->
      <view bindtap='_backhome' wx:if='{{share}}'>
        <image src='/common/image/nav-home.png' mode='aspectFit' class='back-home'></image>
      </view>
    </view>
  </view>
</view>

index.wxss 文件

/*顶部要固定定位   标题要居中   自定义按钮和标题要和右边微信原生的胶囊上下对齐 */.nav-wrap {position:fixed;width:100%;top:0;background:#fff;color:#000;z-index:9999999;
}
/*标题要居中 */.nav-title {position:absolute;text-align:center;max-width:400rpx;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;top:0;left:0;right:0;bottom:0;margin:auto;font-size:30rpx;color:#2c2b2b;font-weight:normal;
}
.nav-capsule {display:flex;align-items:center;margin-left:30rpx;width:140rpx;justify-content:space-between;height:100%;
}
.navbar-v-line {width:1px;height:32rpx;background-color:#e5e5e5;
}
.back-pre, .back-home {width:36rpx;height:36rpx;margin-top:8rpx;padding:10rpx;
}.nav-capsule .back-home {width:36rpx;height:40rpx;margin-top:3rpx;
}

index.json文件(自定义组件必须)

{
    "component": true}

index.js 文件

const app =getApp()
Component({
  properties: {
    navbarData: {   //navbarData   由父页面传递的数据,变量名字自命名
type: Object,
      value: {},
      observer: function(newVal, oldVal) {}
    }
  },
  data: {
    height: '',
    //默认值  默认显示左上角
navbarData: {
      showCapsule: 1}
  },
  attached: function() {
    //获取是否是通过分享进入的小程序
    this.setData({
      share: app.globalData.share
    })
    //定义导航栏的高度   方便对齐
    this.setData({
      height: app.globalData.height
    })
  },
  methods: {
    //返回上一页面
_navback(event) {
      //当前页面为“编辑收货地址”时,对返回按钮进行劫持
      if(this.data.navbarData.pageName === 'edit-address'){
        wx.showModal({
          content: '当前页面尚未保存,是否确认返回?',
          cancelColor: '#909399',
          confirmColor: '#3888FF',
          success: function(res){
              if(res.confirm){
                wx.navigateBack()
              }
          }
        })
        return;
      }
      wx.navigateBack()
    },
    //返回到首页
_backhome() {
      wx.switchTab({
        url: '/pages/home/home',
      })
    }
  }

}) 

app.js 文件

App({
  onLaunch: function(options) {
    //判断是否由分享进入小程序
    if (options.scene == 1007 || options.scene == 1008) {
      this.globalData.share = true} else{
      this.globalData.share = false};
    //获取设备顶部窗口的高度(不同设备窗口高度不一样,根据这个来设置自定义导航栏的高度)
wx.getSystemInfo({
        success: (res) =>{
          this.globalData.height =res.statusBarHeight
        }
    })
  },
  globalData: {
    appid: "xxxxxxxxx",
    share: false,  //分享默认为false
    height: 0 //导航栏高度
}
})

app.wxss 文件

page{position:relative;z-index:9999998;
}

自此,导航栏组件已搭建完成,让我们来使用它吧

小程序自定义头部导航栏第4张

在小程序页面中:

index.wxml 文件

<!--引入自定义组价。'navbar-data'中navbar是自定义名字,决定了组件中'navbarData'的名字 -->
<nav-bar navbar-data='{{nvabarData}}'></nav-bar>
<view style='margin-top: {{height}}px'>

</view>

index.json 文件

{
    "usingComponents": {
      "nav-bar": "/components/navbar/index"}
}

index.js文件

//获取应用实例
const app =getApp()
Page({
  data:{
    //组件所需的参数
nvabarData: {
      showCapsule: 1, //是否显示左上角图标   1表示显示    0表示不显示
      title: '我的页面', //导航栏 中间的标题
},
    height: app.globalData.height * 2 + 20  //此页面 页面内容距最顶部的距离
}
}

免责声明:文章转载自《小程序自定义头部导航栏》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇eclipse反编译插件jad安装Azkaban简介和使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第12组 Alpha冲刺 (1/6)(组长)

1.1基本情况 ·队名:美少女战士 ·组长博客:https://www.cnblogs.com/yaningscnblogs/p/13948281.html ·作业博客:https://edu.cnblogs.com/campus/fzu/FZU_SE_KClass/homework/11440 ·组员人数:7人 1.2冲刺情况汇报 吴凝(组长) 燃尽图...

关于View转化成bitmap保存成图片

产品今天说项目分享时要分享出一张  封面图片 + 几行文字 + 二维码图片 的图片。 思索了一下 封面图片和二维码图片让后台给接口得到地址, 主要还是找个方式得到一个包含这些内容的图片。于是就想能不能将View转化成bitmap对象 然后就走了一遍各个前辈的路 整理了下原理和思路。        根据产品的需求  我要实现的步骤  把所有需要的集合在一个V...

小程序使用weapp-qrcode二维码插件,宽高自适应解决方法

小程序使用的是weapp-qrcode.js github地址 使用说明 // 将 dist 目录下,weapp.qrcode.esm.js 复制到项目目录中 import drawQrcode from '../../utils/weapp.qrcode.esm.js' drawQrcode({ width: 200, height: 20...

使用android.view.TouchDelegate扩大View的触摸点击区域

Android4.0设计规定的有效可触摸的UI元素标准是48dp,转化为一个物理尺寸约为9毫米。7~10毫米,这是一个用户手指能准确并且舒适触摸的区域。 如下图所示,你的UI元素可能小于48dp,图标仅有32dp,按钮仅有40dp,但是他们的实际可操作焦点区域最好都应达到48dp的大小。 为使小的UI区域获得良好的触摸交互,根据View的特性,目前碰到了...

[Android] 按钮单击事件的五种写法

在平时学习安卓的过程中,不论是看视频还是看博客,我发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同。所以我想把这些写法总结一下,比较下各种写法的优劣,希望可以让自己可以灵活地选择编码方式。 原文地址请保留http://www.cnblogs.com/rossoneri/p/3975468.html xml文件 1 &l...

【最新揭秘】百度快收权限如何获得,教你一周快速获得快收权限

   对于百度快收权限,很多seo人员很懵,不知道这个怎么获得,看官方解释也很笼统。官方是这样说的:您的站点暂无快速收录权限,站点关联小程序并提交适配规则将有机会优先获得该权限。  但是有一部的人,加入了百度小程序,也一直迟迟未获得,那怎么办?今天我就教你,来!    加入百度小程序需要以下几步:     第一步:网站企业备案,并且在站点属性中加入关联主体...