小程序自定义导航栏

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

效果图

小程序自定义导航栏,小程序相关,小程序,apache

代码

app.json文件下

"window":{
    "navigationStyle": "custom" //增加此属性
  },

app.js文件

//计算高度
App({
  onLaunch() {
    wx.getSystemInfo({ // 获取设备信息
      success: (res) => {
        this.globalData.systeminfo = res
        //导航栏
        let statusBarHeight = res.statusBarHeight // 状态栏高度
        let headerPosi = wx.getMenuButtonBoundingClientRect()  // 胶囊位置信息
        let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点
          height: headerPosi.height,
          width: headerPosi.width,
          // 胶囊top - 状态栏高度
          top: headerPosi.top - statusBarHeight,
          // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
          bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
          // 屏幕宽度 - 胶囊right
          right: res.screenWidth - headerPosi.right
        }
        // 原胶囊bottom + 现胶囊bottom
        this.globalData.navbarHeight = headerPosi.bottom + btnPosi.bottom 
        this.globalData.statusBarHeight = statusBarHeight 
        this.globalData.navbarBtn = btnPosi 
        wx.setStorageSync('navbarHeight', this.globalData.navbarHeight)

      },
    })
    // 获得胶囊按钮位置信息
    this.globalData.headerBtnPosi = wx.getMenuButtonBoundingClientRect()
  },
  globalData: {
    headerBtnPosi: {} ,// 胶囊按钮位置信息
    navbarHeight: 0,
    statusBarHeight: 0,
    navbarBtn: 0
  }
})

组件文件components文件夹下新增navBar文件
index.js

// components/navBar/index.js
const app = getApp();
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    navbarData: { // 由父页面传递的数据
      type: Object,
      value: {
        position:'true'
      },
      observer: function (newVal, oldVal) { }
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    navbarHeight: app.globalData.navbarHeight, // 顶部导航栏高度
    navbarBtn: app.globalData.navbarBtn,
    statusBarHeight: app.globalData.statusBarHeight ,// 状态栏高度
    imgStatus: true
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log("nav",this.data.navbarHeight, this.data);
    let statusBarHeight = app.globalData.systeminfo.statusBarHeight // 状态栏高度
    let headerPosi = app.globalData.headerBtnPosi // 胶囊位置信息

    let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点
      height: headerPosi.height,
      width: headerPosi.width,
      // 胶囊top - 状态栏高度
      top: headerPosi.top - statusBarHeight,
      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
      // 屏幕宽度 - 胶囊right
      right: app.globalData.systeminfo.screenWidth - headerPosi.right
    }

    this.setData({
      navbarHeight: headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
      statusBarHeight: statusBarHeight,
      navbarBtn: btnPosi,
    })
    console.log("nav",this.data.navbarHeight);
    // this.triggerEvent('updateData',{cardIssuersCode:this.data.navbarHeight})
    console.log("navbarHeight",this.data.navbarHeight)
    console.log("navbarBtn-top",this.data.navbarBtn.height)
    console.log("navbarBtn-height",this.data.navbarBtn.top)

    console.log('jksjdfkjkfsf')
  },

  lifetimes: {
    attached: function(options) {
      // 在组件实例进入页面节点树时执行
    }
  },

  /**
   * 组件的方法列表
   */
  methods: {
    _goBack: function () {
      let pages = getCurrentPages();
      if(pages.length==1) {
        wx.switchTab({
          url: '/pages/index/index',
        });
        return;
      }
      wx.navigateBack({
        delta: 1
      });
    }
  }
})

index.wxss

.container {
  width: 100%;
  height: 100px;
  z-index: 1000;
}
.navBar {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  width: 100%;
}
.navBar .navImg {
  position: absolute;
  left: 33rpx;
  display: flex;
  align-items: center;
  z-index: 10;
}
.navBar .navImg .img {
  width: 50rpx;
  height: 50rpx;
}
.navBar text {
  font-size: 35rpx;
}
.textTitle {
  font-weight: bold;
}
.navBarPosition {
  width: 100%;
  height: 100px;
  position: fixed;
  z-index: 1000;
}
.img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.textColor {
  color: white;
  position: absolute;
  width: 672rpx;
  text-align: center;
  font-weight: bold;
}
.navText {
  position: absolute;
  width: 672rpx;
  text-align: center;
  font-weight: bold;
}

index.wxml

<view class="navBar {{navbarData.position?'navBarPosition':''}}" style="height: {{navbarHeight}}px;">
  <view class="navImg" style='margin-top: {{statusBarHeight}}px;top: 18rpx' >
   //左箭头图标自己更换本地文件
    <image src="/assets/images/make/back.png" bindtap="_goBack" wx:if="{{imgStatus}}" class="img"></image>
    <image src="http://res.ctmus.cn/festival-h5.v19/resource/2022/11/29/580c1edc-cb7d-4726-b3bc-aabdc397820b.png" bindtap="_goBack" style="width: 40rpx; height: 40rpx;" wx:else=""></image>
  </view>
  <view  style='line-height:{{navbarBtn.height + navbarBtn.top}}px;margin-top: {{statusBarHeight}}px; top: 8rpx' class="{{imgStatus ? 'navText' : 'textColor'}}" >
    <text class="textTitle">{{navbarData.title }}</text>
  </view>

  <!-- <view style="background-color: pink; height: 500rpx;"></view> -->
</view>

使用

<navBar navbarData="{{navbarData}}"></navBar>

js文章来源地址https://www.toymoban.com/news/detail-599707.html

Page({
  data: {
    navbarData: {
      // 是否显示左上角胶囊按钮 1 显示 0 不显示
      title: '选择视频模板' // 导航栏 中间的标题
    },
  },
  
})

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

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

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

相关文章

  • Uniapp-小程序自定义导航栏

    制作小程序页面时候发现原生导航栏有一定的高度是没有背景渲染的会出现这种情况 但是我们需要的是 小程序的原生导航栏存在。一般可以使用 纯色填充顶部栏 可以直接使用navigationBarBackgroundColor完成 在style中添加 \\\"navigationBarBackgroundColor\\\": \\\"#FED000\\\" 但是业务需求需要添加自

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

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

    2024年02月07日
    浏览(55)
  • 微信原生小程序自定义顶部导航

    都2023了,自定义顶部导航应该不是什么新鲜事了,这里只是简单记录下 微信自己也提供了自定义顶部导航 navigation-bar ,大概看了下,可配置的也不少,所以看需求了,如果简单可以采用微信提供的,老规矩,先看效果 状态栏高度(getSystemInfoSync),就是手机顶部网络那块的

    2024年02月15日
    浏览(42)
  • uniapp 小程序自定义导航栏计算状态栏(顶部)与导航栏(胶囊)高度

    uni.getMenuButtonBoundingClientRect() 参考链接 uni.getSystemInfo()参考链接

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

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

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

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

    2024年04月27日
    浏览(37)
  • 小程序实现自定义顶部导航栏搜索框

    在实现前先将其组件化,方便复用, (底部有demo) Component(Object object) | 微信开放文档 \\\"component\\\": true, // 自定义组件声明 \\\"usingComponents\\\": {} // 可选项,用于引用别的组件 \\\"navigationStyle\\\": \\\"custom\\\"// 导航栏样式   default  默认样式   custom  自定义导航栏,只保留右上角胶囊按钮 接下

    2024年02月12日
    浏览(51)
  • 小程序 WEUI 隐藏导航栏使用自定义导航栏时Toptips在顶部显示

    使用weui的toptips时候,我们的导航栏使用了自定义,高度根据系统来定的,然后使用form表单验证提示弹窗时,会在最上面被遮挡了。    需要使用weui ext-class 来实现穿透修改样式。 ext-class的top使用继承父元素的top即可 现在没被顶在最上面了

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

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

    2024年02月10日
    浏览(54)
  • 微信小程序自定义导航栏navBar组件

    参考链接,第二个链接下滑时导航栏变白色好用微信小程序自定义navigationBar顶部导航栏,兼容适配所有机型(附完整案例)_小程序自定义导航栏-CSDN博客  【微信小程序开发(二)】自定义导航栏_微信小程序分类导航栏-CSDN博客 一.创建navBar组件 1.components下创建navBar文件夹

    2024年04月25日
    浏览(79)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包