uniapp公用返回组件

news2025/1/19 8:28:06

uniapp写一个公用的头部组件,包含home和返回。

  1. 页面中的引用
    在这里插入图片描述
    2.在components文件夹下,新建一个navBar.vue
<template>
	<view class="view-wrap">
		<view :style="{ height: barHeight }"></view>
		<view class="nav-bar-wrap" :style="{ background: background }">
			<view class="status-bar" :style="{ height: statusHeight }"></view>
			<view class="nav-bar" :style="{ padding: menuGap, gap: menuGap, height: menuHeight }">
				<view class="left" v-if="back"
					:style="{ width: menuWidth, height: menuHeight, lineHeight: menuHeight }">
					<uni-icons type="arrow-left" size="20" :color="backColor" @click="handleBack"></uni-icons>
					<uni-icons type="home-filled" size="20" :color="backColor" @click="handleHome"></uni-icons>
				</view>
				<view v-else
					:style="{ width: menuWidth, height: menuHeight, lineHeight: menuHeight }">
				</view>
				<view class="logo-block" v-if="type == 'icon'">
					<image class="logo"
						src="https://img.js.design/assets/img/63eef16e94031f91576975f7.png#6f1b14d0e35a1527a5a6621e0b5125a8">
					</image>
				</view>
				<view :style="{ color: backColor, fontSize: titleFontSize }" v-if="type == 'title'">
					{{ title }}
				</view>
				<view v-if="type == 'slot'" class="container" v-else>
					<slot></slot>
				</view>
				<view class="right" :style="{ width: menuWidth, height: menuHeight }"></view>
			</view>
		</view>
	</view>
</template>

<script>
	const {
		windowWidth,
		statusHeight,
		menuGap,
		menuWidth,
		menuHeight
	} = getApp().globalData
	export default {
		props: {
			background: {
				type: String,
				default: '#ffffff'
			},
			backOption: {
				default: false,
				type: Boolean
			},
			back: {
				type: Boolean
			},
			type: {
				type: String,
				default: 'title'
			},
			title: {
				type: String,
				default: ''
			},
			backColor: {
				type: String,
				default: '#000'
			},
			titleFontSize: {
				type: String,
			},
		},
		data() {
			return {
				barHeight: '32px',
				menuGap: '7px',
				menuWidth: '0px',
				menuHeight: '32px',
				statusHeight: '7px',
				borderRadius: '4px',
				keyWord: '',
			};
		},
		mounted() {
			this.statusHeight = statusHeight + 'px'
			this.menuGap = menuGap + 'px'
			this.menuWidth = menuWidth + 'px'
			this.menuHeight = menuHeight + 'px'
			this.borderRadius = menuHeight / 2 + 'px'
			this.barHeight = statusHeight + menuHeight + menuGap * 2 + 'px'
			uni.setStorageSync('barHeight', this.barHeight)
		},
		computed: {
			barWidth() {
				if (this.back) {
					return windowWidth - menuWidth - menuGap * 4 - 26 + 'px'
				} else {
					return windowWidth - menuWidth - menuGap * 3 + 'px'
				}
			}
		},
		methods: {
			//处理返回
			handleBack() {
				let that = this
				let pages = getCurrentPages();
				let currPage = pages[pages.length - 1]; //当前页面
				let prevPage = pages[pages.length - 2];

				uni.navigateBack({
					delta: 1,
					success: function(e) {
						if (that.backOption) {
							let page = getCurrentPages().pop();
							if (page == undefined || page == null) return;

							page.onLoad();
						}

					}
				})

				uni.$emit('back')
			},
			handleHome() {
				uni.switchTab({
					url: '/pages/index/index'
				})
			},
		}
	}
</script>

<style lang="scss" scoped>
	.view-wrap {
		position: relative;

	}

	.nav-bar-wrap {
		position: fixed;
		top: 0;
		z-index: 99;
		width: 100%;
		left: 0;
		right: 0;
		// box-shadow: 0px 3px 6px 0px rgba(216, 216, 216, 0.16);

		.nav-bar {
			display: flex;
			justify-content: space-between;
			align-items: center;
			box-sizing: content-box;

			.left {
				// width: 26px;
				// width: 79px;
				border: 0.5px solid rgba(241, 241, 241, 1);
				border-radius: 30px;
				// height: 30px;
				// line-height: 30px;
				flex-shrink: 0;
				display: flex;
				justify-content: space-between;
				padding: 0 13px;
				box-sizing: border-box;
				// text-align: center;
				background-color: rgba(255, 255, 255, 0.8);
			}


			.logo-block {
				// margin-left: 45%;
			}

			.logo {
				width: 34.14px;
				height: 40.48px;

			}

			.container {}


			.right {
				flex-shrink: 0;
			}


		}
	}
</style>
  1. 在App.vue中设置全局变量
<script>
	export default {
		globalData: {},
		onLaunch: function() {
			this.initBounding();
		},
		onHide: function() {},
		methods: {
			initBounding() {
				const {
					windowWidth,
					windowHeight,
					statusBarHeight
				} =
				uni.getSystemInfoSync();

				let menuGap = 7;
				let menuWidth = 0;
				let menuHeight = 32;
				let statusHeight = 7;

				// #ifdef MP
				const {
					top,
					left,
					right,
					width,
					height
				} =
				uni.getMenuButtonBoundingClientRect();
				menuGap = windowWidth - right;
				menuWidth = width;
				menuHeight = height;
				statusHeight = top - menuGap;
				// #endif

				// #ifdef APP-PLUS
				statusHeight = statusBarHeight;
				// #endif

				this.globalData.windowWidth = windowWidth;
				this.globalData.windowHeight = windowHeight;
				this.globalData.statusHeight = statusHeight;
				this.globalData.menuGap = menuGap;
				this.globalData.menuWidth = menuWidth;
				this.globalData.menuHeight = menuHeight;

			},
		},
	};
</script>

<style lang="scss">
	@import "@/common/index.scss";
	@import "@/common/common.scss";
	// 设置整个项目的背景色
	page {
		background: #F4F4F4;
		//font-family: "PingFang SC", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important;
		font-family: "Source Han Sans CN", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
	}
</style>
  1. 在main.js中注册全局组件
import App from './App'
import {formatImage,formatPrice,validatePhoneNumber,validateIDCard} from "@/utils/index.js"
import store from './store'

// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false

Vue.prototype.formatImage = formatImage
Vue.prototype.formatPrice = formatPrice
Vue.prototype.validatePhoneNumber = validatePhoneNumber
Vue.prototype.validateIDCard = validateIDCard
Vue.prototype.$store = store

let onFun = uni.$on;
uni.$on = (eventName,obj) =>{
try {
uni.$off(eventName);
} catch (error) {}
onFun(eventName,obj);
}

App.mpType = 'app'
const app = new Vue({
	store,
  ...App
})
app.$mount()
// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
  const app = createSSRApp(App)
  // 注册全局组件
  for (let key in components) {
  	app.component(key,components[key])
  }
  return {
    app
  }
}
// #endif

效果图如下
在这里插入图片描述
可以返回上一页和home页,也可以配置自己喜欢的颜色。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1847692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EtherCAT扫盲,都是知识点

1. 什么是EtherCAT EtherCAT&#xff0c;全称Ethernet for Control Automation Technology&#xff0c;字面意思就是用于控制自动化技术的以太网。它是一种基于以太网的实时工业通信协议&#xff0c;简单说&#xff0c;就是让机器们通过网线互相聊天的高级方式。 EtherCAT 是最…

openEuler 22.03 (LTS-SP1)服务器用ntpd同步GPS时间服务器的案例

本文记录了openEuler 22.03 (LTS-SP1)的二级时间服务器用chronyd不能自动同步GPS时间服务器&#xff0c;改用ntpd同步GPS时间服务器成功的案例 一、环境简述 1、本环境中有两台GPS一级时间服务器&#xff0c;IP如下&#xff1a; 192.168.188.66 192.168.188.74 2、有一台o…

开发中遇到的错误 - @SpringBootTest 注解爆红

我在使用 SpringBootTest 注解的时候爆红了&#xff0c;ait 回车也导不了包&#xff0c;后面发现是因为没有加依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>…

JAVA小知识28:FIle类文件对象

Java 中的 File 类是 java.io 包中的一个类&#xff0c;用于表示文件和目录路径名的抽象表示。它提供了一些方法来操作文件和目录 一、File的创建 1.1、绝对路径 绝对路径是指从文件系统的根目录开始定位文件或目录的完整路径。它通常以根目录符号开始&#xff0c;在 Window…

​Claude 3.5 最新体验:助力硕博生与科研人员高效完成论文,超越ChatGPT4o !

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 要不说AI领域的进展真的是日新月异&#xff0c;发展速度已经大大超过预期进度。娜姐本来在准备AI降重工具的测评文章&#xff08;最近好多小伙伴需要&#xff09;。 昨天晚上…

多头Attention MultiheadAttention 怎么用?详细解释

import torch import torch.nn as nn# 定义多头注意力层 embed_dim 512 # 输入嵌入维度 num_heads 8 # 注意力头的数量 multihead_attn nn.MultiheadAttention(embed_dim, num_heads)# 创建一些示例数据 batch_size 10 # 批次大小 seq_len 20 # 序列长度 query torch…

rknn转换后精度差异很大,失真算子自纠

下面是添加了详细注释的优化代码&#xff1a; import cv2 import numpy as np import onnx import onnxruntime as rt from onnx import helper, shape_inferencedef get_all_node_names(model):"""获取模型中所有节点的名称。参数:model (onnx.ModelProto): O…

【有手就会】图数据库Demo教程,实现反洗钱场景下银行转账流水数据分析

前言 星环社区版家族于近期发布了单机、30s一键启动的StellarDB图数据库&#xff0c;本篇文章将为用户介绍如何使用开发版StellarDB实现人物关系探索。 友情链接&#xff1a;白话大数据 | 关于图数据库&#xff0c;没有比这篇更通俗易懂的啦 TDH社区版本次发布StellarDB社区…

可信启动Trusted Board Boot

TBB Trusted Board Boot&#xff08;TBB&#xff09;对所有固件镜像&#xff08;包括普通世界的bootloader&#xff09;进行身份验证&#xff0c;以防止恶意固件在平台上运行。TBB使用公钥加密标准 &#xff08;PKCS&#xff09;来建立信任链&#xff08;Chain of Trust&#…

密码CTF(4)——e和phi不互素

参考 RSA中e和phi不互素 AMM算法 AMM算法简要理解 RSA系列解题研究——e与phi不互素 - 先知社区 (aliyun.com) e与phi不互素 --- 四 1 1 1道题详记-CSDN博客 总述 gcd(e,φ(n))比较小时可以考虑iroot直接开根&#xff0c;当直接开根跑不出来时&#xff0c;考虑有限域…

xargs 传参

xargs的默认命令是 echo&#xff0c;空格是默认定界符。这意味着通过管道传递给 xargs的输入将会包含换行和空白&#xff0c;不过通过 xargs 的处理&#xff0c;换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。 xargs -n1 // 一次输出一个参数到一行&#xf…

【Android面试八股文】你能说一说自定义View与ViewGroup的区别

文章目录 Android UI 组件:View 和 ViewGroupViewGroup 的职责View 的职责自定义 View 和 ViewGroup 的区别1. 继承的类不同2. 主要功能不同3. 重写方法不同4. 使用场景不同5. 事件分发方面的区别6. UI 绘制方面的区别Android UI 组件:View 和 ViewGroup 在 Android 开发中,…

Python开发日记--手撸加解密小工具(3)

目录 1.xcb-cuisor0问题解决 2.AES-CBC算法实现 2.1 信号和槽机制 2.2 开始设计算法 3.小结 1.xcb-cuisor0问题解决 继续解决该问题&#xff0c;在Ubuntu下面运行会发生这个错误。 看描述&#xff0c; 这是说要运行Qt xcb平台插件&#xff0c;需要xcb-cursor0或者libxcb-c…

舔狗日记Puls微信小程序源码

源码介绍&#xff1a; 这是一款舔狗日记Puls微信小程序源码&#xff0c;提供每日一舔的功能&#xff0c;让你舔到最后&#xff0c;什么都有&#xff01; 源码通过API获取一些舔狗日记&#xff0c;内置了100多句舔狗日记&#xff0c;让你摆脱上班摸鱼的无聊时光&#xff0c; …

Python火焰锋动力学和浅水表面波浪偏微分方程

&#x1f3af;要点 &#x1f3af;流图可视化正弦余弦矢量场 | &#x1f3af;解空间变化边界条件二维拉普拉斯方程 | &#x1f3af;解圆柱坐标系标量场 | &#x1f3af;解一维泊松方程 | &#x1f3af;解二维扩散方程 | &#x1f3af;解火焰锋的动力学偏微分方程 | &#x1f3a…

【LeetCode刷题】6. Z 字形变换

1. 题目链接2. 题目描述3. 解题方法4. 代码 1. 题目链接 6. Z 字形变换 2. 题目描述 3. 解题方法 假设一串字符串"abcdefghijklmnopqrstuvwx", 会有如下排列&#xff1a; 我们再以下标来看看排列 从下标来看&#xff0c;每个下标是有规律的 每一行的下标之间的差…

一个自定义流程的平台

脚本语言使用的是C#&#xff0c;当用户发布一个新的流程时&#xff0c;会把C#的脚本编译成dll&#xff0c;然后添加到微服务中&#xff0c;因为有了硬编译&#xff0c;所以执行速度是非常快的。逻辑脚本支持调试&#xff0c;可以断点和逐行调试。平台提供了调试工具&#xff0c…

每月 GitHub 探索|10 款引领科技趋势的开源项目

1.IT-Tools 仓库名称&#xff1a; CorentinTh/it-tools 截止发稿星数: 16842 (近一个月新增:5744) 仓库语言: Vue 仓库开源协议&#xff1a; GNU General Public License v3.0 引言 CorentinTh/it-tools 是一个开源项目&#xff0c;提供各种对开发者友好的在线工具&#xff0…

LabVIEW项目中的常见电机及其特点分析

在LabVIEW项目中&#xff0c;电机的选择对系统的性能和应用效果至关重要。常见电机类型包括直流电机&#xff08;DC Motor&#xff09;、步进电机&#xff08;Stepper Motor&#xff09;、交流感应电机&#xff08;AC Induction Motor&#xff09;和无刷直流电机&#xff08;BL…

使用上海云盾 CDN 和 CloudFlare 后 Nginx、 WordPress、 Typecho 获取访客真实 IP 方法

最近因为被 DDoS/CC 攻击的厉害,明月就临时的迁移了服务器,原来的服务器就空置下来了,让明月有时间对服务器进行了重置重新部署安装生产环境。因为站点同时使用了上海云盾和 CloudFlare(具体思路可以参考【国内网站使用国外 CloudFlare CDN 的思路分享】一文)两个 CDN 服务…