美文网首页
uniapp小程序获取titleBar的高度和宽度

uniapp小程序获取titleBar的高度和宽度

作者: microkof | 来源:发表于2021-01-08 14:44 被阅读0次

titleBar是哪里

就是小程序上方由胶囊占据的bar,就叫titleBar。

为什么要获取它的高度

因为我们可以在胶囊左侧写标题和其他一些东西。这些东西要跟胶囊中线对齐。

怎么获取它的高度

首先我们要撑起statusBar的高度,也就是最顶部的那个bar。这个bar的高度很容易取得。

uni.getMenuButtonBoundingClientRect().top取得的是胶囊距离视口顶部的距离,减掉statusBar的高度,就是胶囊离statusBar下沿的距离。这个距离乘以2,加上胶囊自身高度,就是titleBar的高度。

<template>
  <view :style="{paddingTop: statusBarHeight + 'px'}">
    <view :style="{height: titleBarHeight + 'px', backgroundColor: 'red'}"></view>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        statusBarHeight: 0,
        titleBarHeight: 0,
      }
    },
    onLoad() {
      const SystemInfo = wx.getSystemInfoSync();
      this.statusBarHeight = SystemInfo.statusBarHeight;
    },
    onReady() {
      this.titleBarHeight = (uni.getMenuButtonBoundingClientRect().top - this.statusBarHeight) * 2 +
        uni.getMenuButtonBoundingClientRect().height;
    },
  }
</script>

效果

见红色部分。

开发者工具中会有略微错位,无妨,以真机为准。

image.png

怎么获取胶囊左侧空白区域的宽度

我们希望胶囊左侧空白区域与胶囊有间距,而且间距最好是等于胶囊到右边边线的距离。这个前提下,左侧空白区域的宽度怎么算?

      this.titleBarWidth = uni.getSystemInfoSync().windowWidth - uni.getMenuButtonBoundingClientRect().width -
        (uni.getSystemInfoSync().windowWidth - uni.getMenuButtonBoundingClientRect().right) * 2;

组件化

写成组件就是这样:

<template>
  <view :style="{paddingTop: statusBarHeight + 'px'}">
    <view :style="{width: titleBarWidth + 'px', height: titleBarHeight + 'px'}">
      <slot :menuButtonHeight="menuButtonHeight" :titleBarHeight="titleBarHeight"></slot>
    </view>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        statusBarHeight: 0,
        menuButtonHeight: 0,
        titleBarWidth: 0,
        titleBarHeight: 0,
      }
    },
    created() {
      this.statusBarHeight = uni.getSystemInfoSync().statusBarHeight;
    },
    onReady() {
      this.menuButtonHeight = uni.getMenuButtonBoundingClientRect().height;
      this.titleBarWidth = uni.getSystemInfoSync().windowWidth - uni.getMenuButtonBoundingClientRect().width -
        (uni.getSystemInfoSync().windowWidth - uni.getMenuButtonBoundingClientRect().right) * 2;
      this.titleBarHeight = (uni.getMenuButtonBoundingClientRect().top - this.statusBarHeight) * 2 +
        this.menuButtonHeight;
    }
  }
</script>

用法:

演示如何使用作用域插槽:

    <title-bar>
      <template v-slot="{menuButtonHeight}">
        <view class="flex align-center h-100 padding-left-20">
          <image src="/static/default-avatar.png"
            :style="{width: menuButtonHeight + 'px', height: menuButtonHeight + 'px'}"
            class="block margin-right-20"
          />
          请先登录
        </view>
      </template>
    </title-bar>

相关文章

网友评论

      本文标题:uniapp小程序获取titleBar的高度和宽度

      本文链接:https://www.haomeiwen.com/subject/tahfaktx.html