微信小程序自定义搜索标题栏

Posted 五花肉三七分

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序自定义搜索标题栏相关的知识,希望对你有一定的参考价值。

一:需求

  1. 把微信小程序标题栏处变成搜索栏。
  2. 自定义返回上级页面。

二:需求分析

  1. 首先要把小程序标题栏设置为可自定义。
  2. 然后计算原标题栏的高度组成结构。
  3. 根据计算高度设置搜索框和返回按钮的布局。
  4. 最后进行代码功能实现。

三:功能实现

1:设置标题栏可自定义

usingComponents是使用的相关组件


    "usingComponents": 
        "van-uploader": "@vant/weapp/uploader/index",
        "van-button": "@vant/weapp/button/index",
         "van-search": "@vant/weapp/search/index"
      ,
    "navigationStyle": "custom"

2:计算标题栏高度

标题栏高度组成部分:最上边的状态栏高度statusBarHeight中间按钮高度getMenuButtonBoundingClientRect中间按钮的上下边距margin

  1. 获取状态栏高度wx.getSystemInfo.statusBarHeight
  2. 获取中间按钮高度wx.getMenuButtonBoundingClientRect()(这里一共四个值top, width, height, right具体对应可查微信开发文档)
  3. 获取中间按钮的上下边距margin = top(中间按钮上边界坐标) - statusBarHeight

 onLoad: function (options) 
        this.setData(
            menuButtonInfo: wx.getMenuButtonBoundingClientRect()
          )
        //   console.log(this.data.menuButtonInfo)
          const  top, width, height, right  = this.data.menuButtonInfo
          wx.getSystemInfo(
            success: (res) => 
              const  statusBarHeight  = res
              const margin = top - statusBarHeight
              this.setData(
                navHeight: (height + statusBarHeight + (margin * 2)),
                searchMarginTop: statusBarHeight + margin, // 状态栏 + 胶囊按钮边距
                searchHeight: height,  // 与胶囊按钮同高
                searchWidth: right - width // 胶囊按钮右边坐标 - 胶囊按钮宽度 = 按钮左边可使用宽度
              )
            ,
          )
        // 生命周期函数--监听页面加载
    ,

 四:代码实现

1:js

Page(
    data:
        navHeight: '',
        menuButtonInfo: ,
        searchMarginTop: 0, // 搜索框上边距
        searchWidth: 0, // 搜索框宽度
        searchHeight: 0, // 搜索框高度
    ,
    goBack()
        wx.navigateBack(
            delta: 1, // 回退前 delta(默认为1) 页面
        )
    ,
    onLoad: function (options) 
        this.setData(
            menuButtonInfo: wx.getMenuButtonBoundingClientRect()
          )
        //   console.log(this.data.menuButtonInfo)
          const  top, width, height, right  = this.data.menuButtonInfo
          wx.getSystemInfo(
            success: (res) => 
              const  statusBarHeight  = res
              const margin = top - statusBarHeight
              this.setData(
                navHeight: (height + statusBarHeight + (margin * 2)),
                searchMarginTop: statusBarHeight + margin, // 状态栏 + 胶囊按钮边距
                searchHeight: height,  // 与胶囊按钮同高
                searchWidth: right - width // 胶囊按钮右边坐标 - 胶囊按钮宽度 = 按钮左边可使用宽度
              )
            ,
          )
        // 生命周期函数--监听页面加载
    ,
)

 2:wxss

/* 自定义导航栏 */
view 
  box-sizing: border-box;
  overflow: hidden;

.custom-bar 
  /* background-color: #aaa; */
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  background-color: #fafafa;
  z-index: 9;

.custom-bar__wrapper 
  padding: 0 10rpx;
  display: flex;
  justify-content: space-between;
  align-items: center;

.search-group 
  width: 88%;
  height: 100%;
  border: 1px solid #666;
  background-color: #fafafa;
  border-radius: 60rpx;

.van-search 
  font-size: 25rpx;
  margin: 0 -15rpx;
  height: 100%;

.goback 
  justify-content: flex-start;
  width: 40rpx;
  height: 40rpx;
  margin-left: 20rpx;

.search-btn 
  width: 100rpx;
  font-size: 35rpx;

 3:wxml

<!-- 自定义导航栏 -->
<view class="custom-bar" style="height:navHeightpx">
    <view class="custom-bar__wrapper" style="margin-top:searchMarginToppx; height: searchHeightpx;width: searchWidthpx" >
        <image src="../../../images/assetsImg/img5.png" class="goback" bindtap="goBack"></image>
      <view class="search-group">
        <van-search use-action-slot="true" background="#fafafa" shape="round" field-class="van-search" focus  value=" inputValue " placeholder="请输入关键字" bind:change="changeValue"> <view class="search-btn" slot="action" bind:tap="onClick">搜索</view></van-search>
    </view>
    </view>
  </view>

五:效果展示

以上是关于微信小程序自定义搜索标题栏的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序自定义搜索标题栏

微信小程序 自定义导航栏

如何实现全屏小程序及自定义左上角胶囊

总结-微信小程序自定义顶部导航(超详细)附加效果图

微信小程序镜像胶囊组件(colorui)

微信小程序 自定义标题栏