自定义navigateBack | 青训营笔记

73 阅读1分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 14 天

原本还不知道今天笔记内容要写什么好,点开了一下项目,扫了一眼components文件夹,发现有一个组件——自定义顶部导航栏,这又是一个开发中为了兼容多个页面使用的组件,所以来记录一下

普通的、常规的、原生的长这个样子

image.png 我写出来的组件长这样 image.png 也可以长这样

image.png

image.png

实现过程 先去pages.json对应页面把navigationStyle改为自定义 image.png 然后新建vue文件(手动doge)

很明显上边两种效果,左侧的返回是不一样的,说明标签就已经是不一样了,而中间部分,就是简单的文本,居中效果,就可以用一个插槽实现

先利用uni.getMenuButtonBoundingClientRect()获取原生的胶囊(右上角的圆角矩形)的位置宽高等信息,单位都是px

然后我们用fixed定位把最外层容器定到这样

image.png

image.png

接下来就可以在这区域内绘制我们的东西

image.png 这两个就是一个实现纯返回箭头,一个多一个编辑功能(图标一换,功能就能换,通过emit想父组件/页面传递事件就行)


    <image
      class="image"
      :src="icon.back[backType]"
      mode=""
      v-if="!hasAnotherFun"
      @click="goBack"
    />
    <view v-else class="hasAnotherFun">
      <view>
        <image :src="icon.back[backType]" mode="" @click="goBack" class="fun" />
      </view>
      <view class="divide"></view>
      <view>
        <image
          class="fun"
          :src="isEditing ? icon.over : icon.edit"
          mode=""
          style="transform: scale(0.58);}"
          @click="anotherFun"
        />
      </view>
    </view>

然后就放一个插槽就行

image.png

image.png 调用的时候就这样

    <custom-navigation
      :backType="1"
      :hasAnotherFun="true"
      @anotherFun="changeEditing"
    >
      <view style="text-align: center; line-height: 32px">嘿嘿嘿</view>