uni-app 安卓APP开发记录

手机APP/开发
348
0
0
2023-01-10

1.使用uni-nav-bar 自定义导航栏

需要先在page.js中把当前页面设置

"navigationStyle": "custom"

然后在页面中使用uni-nav-bar

    <uni-nav-bar
      dark
      id="tabbar"
      class="tabBar"
      title="导航栏组件"
      :statusBar="true"
    ></uni-nav-bar>

需要设置:statusBar="true",不然导航会跟手机顶部的状态栏重叠

在不知道这个属性之前,发现可以通过设置--status-bar-height(uni-app全局封装的变量)实现

#tabbar {
  margin-topvar(--status-bar-height); 
}

参考:https://blog.csdn.net/weixin_44143975/article/details/90789026

再看一下uni-nav-bar中uni-status-bar这个组件的源码:

<template>
  <view :style="{ height: statusBarHeight }" class="uni-status-bar">
    <slot />
  </view>
</template>

<script>
  export default {
    name'UniStatusBar',
    data() {
      return {
        statusBarHeight20
      }
    },
    mounted() {
      this.statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px'
    }
  }
</script>

<style lang="scss" >
  .uni-status-bar {
    // width750rpx;
    height20px;
    // heightvar(--status-bar-height);
  }
</style>

组件是通过uni.getSystemInfoSync().statusBarHeight这个方法来获取当前设备的状态栏的高度

2.APP左右上下滑动监听

直接引用别人写好的现成的组件:

<template>
  <view class="wrapper@touchstart="fingerstart@touchend="fingerend">
    <slot></slot>
  </view>
</template>
 
<script>
export default {
  name: "swipe-direct-com",
  data() {
    return {
      // 记录开始位置
      startData: {
        clientX: "",
        clientY: ""
      }
    };
  },
  props: {
    updDistance: {
      // 上下滑动 超过多少距离触发 updownDistance
      type: Number,
      default: 100
    },
    lrDistance: {
      // 左右滑动 超过多少距离触发
      type: Number,
      default: 50
    },
    topMed: {
      // 上划触发 方法名
      type: String,
      default: ""
    },
    bottomMed: {
      // 下滑触发 方法名
      type: String,
      default: ""
    },
    leftMed: {
      // 左滑触发 方法名
      type: String,
      default: ""
    },
    rightMed: {
      // 右滑触发 方法名
      type: String,
      default: ""
    }
  },
  // 解析数据
  mounted() {},
  methods: {
    // 当按下去的时候
    fingerstart(e) {
      // 记录 距离可视区域左上角 左边距 和 上边距
      this.startData.clientX = e.changedTouches[0].clientX;
      this.startData.clientY = e.changedTouches[0].clientY;
    },
    // 当抬起来的时候
    fingerend(e) {
      // 当前位置 减去 按下位置 计算 距离
      const subX = e.changedTouches[0].clientX - this.startData.clientX;
      const subY = e.changedTouches[0].clientY - this.startData.clientY;
      if (subY > this.updDistance || subY < -this.updDistance) {
        if (subY > this.updDistance) {
          this.bottomscroll(subY);
        } else if (subY < -this.updDistance) {
          this.topscroll(subY);
        }
      } else {
        if (subX > this.lrDistance) {
          this.rightscroll(subX);
        } else if (subX < -this.lrDistance) {
          this.leftscroll(subX);
        } else {
          console.log("无效操作");
        }
      }
    },
    // 上滑触发
    topscroll(dista) {
      this.topMed ? this.$emit(`${this.topMed}`, dista) : null;
      console.log("触发了上滑方法!");
    },
    // 下滑触发
    bottomscroll(dista) {
      this.bottomMed ? this.$emit(`${this.bottomMed}`, dista) : null;
      console.log("触发了下滑方法!");
    },
    // 右滑触发
    rightscroll(dista) {
      this.rightMed ? this.$emit(`${this.rightMed}`, dista) : null;
      console.log("触发了右滑方法!");
    },
    // 左滑触发
    leftscroll(dista) {
      this.leftMed ? this.$emit(`${this.leftMed}`, dista) : null;
      console.log("触发了左滑方法!");
    }
  }
};
</script>

然后引用组件:

  <swiper-direct-com
    :lrDistance="5"
    leftMed="scrollL"
    rightMed="scrollR"
    @scrollL="scrollL"
    @scrollR="scrollR"
  >
 
      <!-- 套起来内容 -->

  </swiper-direct-com>

两个方法在methods中:

 methods: {
    // 左滑触发方法
    scrollL() {
      console.log("左滑触发方法");
      /*
        业务逻辑 ....
      */
    },
    // 右滑触发方法
    scrollR() {
      /*
        业务逻辑 ....
      */
      console.log("右滑触发方法");
    }
}

参考:https://blog.csdn.net/slow097/article/details/122469863