微信小程序自定义导航栏navBar组件

这篇具有很好参考价值的文章主要介绍了微信小程序自定义导航栏navBar组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考链接,第二个链接下滑时导航栏变白色好用微信小程序自定义navigationBar顶部导航栏,兼容适配所有机型(附完整案例)_小程序自定义导航栏-CSDN博客

 【微信小程序开发(二)】自定义导航栏_微信小程序分类导航栏-CSDN博客

一.创建navBar组件

1.components下创建navBar文件夹

微信小程序自定义navbar,微信小程序,小程序

 项目用到该组件的的页面比较多,所以获取高度写到app.js

app.js

App({
   onLaunch(options) {
    const that = this;
    // 获取系统信息
    const systemInfo = wx.getSystemInfoSync();
    // 胶囊按钮位置信息
    const menuButtonInfo = wx.getMenuButtonBoundingClientRect();
    // 导航栏高度 = 状态栏高度 + 44
    that.globalData.navBarHeight = systemInfo.statusBarHeight + 44;
    that.globalData.menuRight = systemInfo.screenWidth - menuButtonInfo.right;
    that.globalData.menuTop = menuButtonInfo.top;
    that.globalData.menuHeight = menuButtonInfo.height;
  },
  // 数据都是根据当前机型进行计算,这样的方式兼容大部分机器
  globalData: {
    userInfo: null,
    navBarHeight: 0, // 导航栏高度
    menuRight: 0, // 胶囊距右方间距(方保持左、右间距一致)
    menuTop: 0, // 胶囊距顶部间距
    menuHeight: 0, // 胶囊高度(自定义内容可与胶囊高度保证一致)
})

navBar可能代码缺失,因为只贴主要代码 

navBar.wxml

<!-- 自定义顶部栏 -->
<view class="nav-bar" style="height:{{navBarHeight}}px;width: 100%;" class="{{backType=='login'?'backFFF':''}}">
  <view>
    <view style="height:{{menuHeight}}px; min-height:{{menuHeight}}px; line-height:{{menuHeight}}px; left:{{menuRight}}px; top:{{menuTop}}px;">
      <view wx:if="{{backType=='noBack'}}" class="bg-op2" ></view>
      <view wx:else class="bg-op" style="opacity:{{opacity}};"></view>
      <view style="position: absolute;top:{{menuTop}}px;" class="left-icon" bindtap="navigateBack">
        <image src="png" mode='widthFix'></image>
      </view>
      <view class="title" style="text-align:center;font-size: 28rpx;padding-top:{{menuTop}}px;">{{title}}</view>
      <view class="icon"></view>
    </view>
  </view>
</view>

navBar.js

// components/navBar/navBar.js
const app = getApp()
Component({
  properties: {
    title: {
      type: String,
      value: ''
    },
    backType: {
      type: String,
      value: ''
    },
    toBack: {
      type: String,
      value: ''
    },
    scrollTop: {
      type: String,
      value: '0',
      observer: 'update', // 类似于vue的 watch 动态传值
    },
  },
  data: {
    opacity: 0,
    navBarHeight: app.globalData.navBarHeight,
    menuRight: app.globalData.menuRight,
    menuTop: app.globalData.menuTop,
    menuHeight: app.globalData.menuHeight,
  },
  attached: function () {

  },
  onPageScroll(t) {
    this.setData({
      scrollTop: t.scrollTop
    })
    console.log('scrollTop',this.data.scrollTop)
  },
  methods: {
    navigateBack: function () {
      if(this.data.toBack=='function'){
        wx.switchTab({
          url: ''
        })
      }else{
        wx.navigateBack({
          delta: 1,
        })
      }
    },
    update(newValue) {
      let op = 0;
      if (newValue != 0 && newValue <= 40) {
        op = newValue / 40
      }
      if (newValue >= 40) {
        op = 1;
      }
      this.setData({
        opacity: op
      })
    },
    parentClose: function () {
      debugger
      this.triggerEvent('parentClose');
    },

  }
})

navBar.wxss

/* component/navBar/navBar.wxss */
.nav-bar {
  position: fixed;
  width: 100%;
  top: 0;
  color: #fff;
  z-index: 9999;
}

.backFFF {
  background-color: #FFFFFF;
}

/* .nav-bar .search {
  width: 60%;
  color: #333;
  font-size: 14px;
  background: #fff;
  position: absolute;
  border-radius: 50px;
  background: #ddd;
  padding-left: 14px;
} */

/* 原始 */
.back-nav-bar {
  /* height: 64rpx; */
  width: 100vw;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  z-index: 999;
  position: relative;
}

.bg-op {
  position: absolute;
  width: 100%;
  bottom: 0;
  left: 0;
  /* background: linear-gradient(180deg, #C1CFE5 0%, #DEE4EE 100%); */
  background: #FFFFFF;
  z-index: -1;
}

.bg-op2 {
  position: absolute;
  width: 100%;
  bottom: 0;
  left: 0;
  z-index: -1;
}

.left-icon {
  margin-left: 20rpx;
  padding-right: 50rpx;
}

.left-icon image {
  width: 20rpx;
  height: 38rpx;
  padding-top: 10rpx;
}

.left-icon2 {
  margin-left: 20rpx;
}

.left-icon2 image {
  width: 50rpx;
  height: 45rpx;
  padding-top: 6rpx;
}

.icon {
  width: 40rpx;
  height: 45rpx;
}

 navBar.json

{
  "component": true,
  "usingComponents": {}
}

二.隐藏原生的navigationBar

1.需要全局设为自定义。

app.json里面window全局配置里有个参数:navigationStyle(导航栏样式),default=默认样式,custom=自定义样式。自定义需要配置为custom


"window": {
	"navigationStyle": "custom"
}
2.指定页面设为自定义。

在需要使用自定义组件navBar的页面的json文件里面,设置navigationStyle为custom,并且引入组件

{
  "component": true,
  "navigationStyle": "custom",
  "usingComponents": {
    "navBar": "/components/navBar/navBar",
  }
}

三.父页面使用navBar组件

父页面wxml文件

<navBar backType="editLaw" bind:parentClose="parentClose" title="{{navigaTitle}}"></navBar>

父页面js文件文章来源地址https://www.toymoban.com/news/detail-857208.html

parentClose: function () {
   this.triggerEvent('parentClose');
},

到了这里,关于微信小程序自定义导航栏navBar组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序云开发之自定义顶部导航栏搜索框(非组件)

    提到微信小程序,就不得不提到它那磨人的顶部导航栏,真的有被丑到。身为强迫症患者,笔者实在是难以忍受,好在官方提供了解决方案,但是对于初学者还是有一丢丢的难度,为了初学者不在重蹈笔者的老路,这篇文章就给大家分享一下如何做一个好看的自定义顶部导航

    2024年02月10日
    浏览(40)
  • 微信小程序自定义底部导航栏

    微信小程序自定义底部导航栏,原生实现,不包含其他任何第三方组件,比较干净,开箱即用 效果预览: 可自定义底部导航栏列表样式 可自定义每个菜单的默认、激活后的图标和文字样式 可自定义是否添加中间的大图标菜单,当然也可自定义大图标的默认与激活样式 可自

    2024年02月07日
    浏览(53)
  • 微信小程序自定义顶部导航,滚动页面顶部导航颜色渐变

    微信小程序自定义顶部导航栏,使背景图置顶;当向上滚动页面时,实现顶部导航颜色渐变 实现方法 代码如下(示例): 提示:由于不同的手机机型顶部导航高度不一样,所有要获取手机的信息 总共三步: 1、初始化获取顶部导航信息 2、顶部导航文字上方通过view占位,同

    2024年02月11日
    浏览(53)
  • 微信小程序自定义头部标题导航栏

    wxml: js: wxss: 样例: 支持透明,标题部分可插槽 支持渐变色  常规居中,左上角icon可自定义,本地或者网络路径皆可 或者无标题,只有左上角icon 文件链接: https://download.csdn.net/download/qq_48702470/87815185 文件解压缩至项目根目录下的components文件夹下即可 使用:在想要使用

    2024年02月11日
    浏览(44)
  • 微信小程序(uniapp)自定义导航栏

    微信小程序原生页面导航栏,无法进行自定义交互,如想实现类似下图的效果,就得使用自定义导航栏 这里使用到uView的组件u-navbar 。 提示:以下是本篇文章正文内容,下面案例可供参考 导航栏样式分为两种 default/custom,custom即取消默认的原生导航,默认为default。 原生导航

    2024年04月27日
    浏览(33)
  • 微信小程序自定义导航栏返回和标题

    1.新建组件 index.json navbar.wxss index.ts index.wxml 组件定义完毕 2.修改app.ts文件,获取胶囊和系统信息 3.在具体页面中引用,index.wxml 修改对应index.ts文件 4.实现效果  参考:微信小程序实现原生导航栏和自定义头部导航栏_微信小程序头部导航栏_花铛的博客-CSDN博客 微信小程序自定

    2024年02月10日
    浏览(48)
  • 微信小程序自定义顶部导航,附加返回主页按钮

      目录 一、修改对应json文件 二、获取微信小程序原生顶部导航栏的高  三、获取胶囊的宽高 四、设置wxml页面样式  话不多说,先上效果!!!       首先,我们都知道,通过原生小程序是不具备左侧胶囊的效果的,所以在实现这个功能的时候一定要记得修改当前页的jso

    2024年02月04日
    浏览(50)
  • 微信小程序+vant组件 侧边导航栏切换显示

    设计页面时希望效果:左侧侧边导航栏,右侧内容。点击左侧导航栏的不同块,右侧显示不同内容。 采用了vant组件中侧边导航栏van-sidebar,van-sidebar子标签包括多个van-sidebar-item 实现方法: van-sidebar中设置 bind:change=\\\"onChange\\\": 随后在js文件中编写onChange(event),其中event.deta

    2024年02月13日
    浏览(46)
  • 微信小程序基于vant的自定义底部导航栏

    基于vant-weapp的底部导航栏,首先根据vant官网安装vant https://vant-ui.github.io/vant-weapp/#/quickstart 由于vant的Tabbar 标签栏自带翻页效果,而且不够美观,且小程序最多只支持10个页面栈,点击多了会导致报错 报错如下  将wx.navigateTo改为wx.redirectTo在反复多点很多次之后依然会报错,所

    2024年02月13日
    浏览(43)
  • 微信小程序自定义导航栏定位及胶囊按钮图解

    在自定义小程序导航栏时,右上角的胶囊(MenuButton)在不同机型测试,会发现很难适配。 实测中 不同的手机,胶囊高度不一样、状态栏高度不一样。与模拟器显示的情况是不一样的。 由于小程序在不同的手机上顶部布局会发生变化,不能正确避开胶囊位置,所以通过官方给

    2024年04月25日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包