理想是火,点燃熄灭的灯。
需要先在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-top: var(--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 { statusBarHeight: 20 } }, mounted() { this.statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px' } } </script> <style lang="scss" > .uni-status-bar { // width: 750rpx; height: 20px; // height: var(--status-bar-height); } </style>
组件是通过uni.getSystemInfoSync().statusBarHeight这个方法来获取当前设备的状态栏的高度
直接引用别人写好的现成的组件:
<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("右滑触发方法"); } }
作者: Bill 本文地址: http://biaoblog.cn/info?id=1670386271018
版权声明: 本文为原创文章,版权归 biaoblog 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!
下一篇:低耦合与代码复用率相互矛盾