2025-06-04 11:16:58 +08:00

200 lines
5.2 KiB
Vue

<template>
<page-meta v-if="fontsizeFlag" :page-font-size="fontsize + 'px'" :root-font-size="fontsize + 'px'"></page-meta>
<view :class="{'bg_2b8':scrollTopFlag, 'whiteHeaderBox': themeType}">
<!-- themeType ? 'whiteHeaderBox' : '' -->
<!-- 手机状态层 -->
<view :style="{ height: mobileTopHeight + 'px' }" class="statusBar"></view>
<view class="headerBox">
<u-icon v-if="iconType && showBack" class="backImg" @click="$emit('select')" name="list" size="40"></u-icon>
<uni-icons2 v-else-if="showBack" @click="goBackFn" class="backImg" type="left"></uni-icons2>
<slot class="headerName"></slot>
<view class="rightIcon">
<slot name="right"></slot>
</view>
</view>
</view>
</template>
<script>
export default {
props: ["showBack", "themeType", "iconType"],
data() {
return {
mobileTopHeight: 0,
scrollTopFlag: false,
fontsize: 16,
fontsizeFlag: false,
};
},
mounted() {
// if(uni.getMenuButtonBoundingClientRect()){
// this.mobileTopHeight = uni.getMenuButtonBoundingClientRect().top
// }else{
// this.mobileTopHeight = 0
// }
var that = this;
uni.getSystemInfo({
success(res) {
that.mobileTopHeight = res.statusBarHeight ? res.statusBarHeight : 0;
uni.setStorageSync("systemInfo", res);
console.log(res);
},
});
console.log("this.mobileTopHeight11", this.mobileTopHeight);
// 监听滚动
// #ifdef H5
window.addEventListener("scroll", this.throttleHandleScroll);
// #endif
this.onPageFontSize();
// 监听navigateTo跳转
uni.addInterceptor('navigateTo', {
success(e) {
that.onPageFontSize();
}
});
// 监听redirectTo跳转
uni.addInterceptor('redirectTo', {
success(e) {
that.onPageFontSize();
}
});
// 监听switchTab跳转
uni.addInterceptor('switchTab', {
success(e) {
that.onPageFontSize();
}
});
// 监听navigateBack返回
uni.addInterceptor('navigateBack', {
success(e) {
that.onPageFontSize();
}
});
},
beforeDestroy() {
// #ifdef H5
window.removeEventListener('scroll', this.throttleHandleScroll);
// #endif
uni.removeInterceptor('navigateTo');
uni.removeInterceptor('redirectTo');
uni.removeInterceptor('switchTab');
uni.removeInterceptor('navigateBack');
},
methods: {
onPageFontSize() {
let that = this;
that.fontsizeFlag = false;
//窗体改变大小触发事件
// uni.onWindowResize((res) => {
// console.log('变化后的窗口宽度=', res.size.windowWidth);
// let scale = res.windowWidth / 1920;
// that.fontsize = 58 * Math.min(scale, 2);
// })
//打开获取屏幕大小
uni.getSystemInfo({
success(res) {
console.log('设备信息:', res);
let scale = res.windowWidth / (res.windowWidth > 760 ? 1920 : 1520)
that.fontsize = 58 * Math.min(scale, 2);
console.log('字体大小:', that.fontsize, that.fontsizeFlag);
that.$nextTick(() => {
that.fontsizeFlag = true;
})
}
})
},
// 节流处理滚动事件
throttleHandleScroll() {
// 距顶部
var scrollTop =
document.documentElement.scrollTop || document.body.scrollTop;
// 可视区高度
var clientHeight =
document.documentElement.clientHeight || document.body.clientHeight;
// 滚动条总高度
var scrollHeight =
document.documentElement.scrollHeight || document.body.scrollHeight;
// 打印数值
// console.table([
// {
// label: "距顶部",
// value: scrollTop,
// },
// {
// label: "可视区高度",
// value: clientHeight,
// },
// {
// label: "滚动条总高度",
// value: scrollHeight,
// },
// {
// label: "距顶部 + 可视区高度",
// value: scrollTop + clientHeight,
// },
// ]);
console.log("scrollTop", scrollTop);
if (scrollTop == 0 && this.scrollTopFlag) {
// document.querySelector('.headerBox').style.backgroundColor = 'transparent';
this.scrollTopFlag = false;
} else if (scrollTop > 0 && !this.scrollTopFlag) {
this.scrollTopFlag = true;
// document.querySelector('.headerBox').setAttribute('style', 'background-color: #2b8df3 !important');
}
},
goBackFn() {
uni.navigateBack({
success: function() {
// console.log('getCurrentPages()',getCurrentPages())
// let page = getCurrentPages()[0]; //跳转页面成功之后
// if(page.route=='pages/projectManage/projectManage'){
// }
// if (!page) return;
// page.onLoad(); //如果页面存在,则重新刷新页面
},
});
},
},
// watch: {
// $route: {
// deep: true,
// handler(val) {
// // console.log("watch", val);
// this.onPageFontSize();
// },
// },
// }
};
</script>
<style lang="scss" scoped>
.statusBar {
// background-color: #2a2b5b;
background-color: white;
}
.bg_2b8 {
background-color: #2b8df3 !important;
}
.whiteHeaderBox {
.statusBar {
// background-color: #2b8df3;
background-color: transparent;
}
.rightIcon {
position: absolute;
right: 20rpx;
top: 50%;
transform: translateY(-50%);
z-index: 10;
}
}
</style>