小程序如何实现“皮肤”切换

news/2024/7/20 3:34:54 标签: 小程序, vue.js, css, vue

最近在做一个小程序,但由于小程序本身的一些限制,看似无法实现类似于原生应用整套的皮肤切换,例如页面背景,全局样式等,但真的就没有办法了吗,在这里我用一个uni-app小程序为大家提供一个小程序皮肤切换的思路。

背景图

首先App.vue通过设置page的background-image方式来做背景图的方式是无法进行自由切换的了,因此在这里使用的方法是:在每个界面设置一个mask,通过改变mask的background-image来改变页面背景。

<view class="mask" :class="computedbgp"></view>
computed: {
	computedbgp(){
		return 'bgp'+getApp().globalData.classsuffix
	}
},

在App.vue声明一个全局变量,这样好控制每个页面背景图相同。全局变量的注意事项和使用方法都可以在uniapp的官方文档中找到,这里就不赘述了。

<script>
	export default {
		globalData:{
			classsuffix:''
		},
		onLaunch: function() {
			
		},
		onShow: function() {
			var time = new Date();
			if (time.getHours() >= 22) {
				this.$scope.globalData.classsuffix='_night'
				uni.setNavigationBarColor({
					frontColor:'#000000',
					backgroundColor:'#34495e'
				});
			}
		},
		onHide: function() {

		}
	}
</script>

通过这样的方法,我们就可以得到一个动态的class名,mask绑定的class为:‘bgp’+后缀,后缀可通过后端获取每个用户对应的背景图,或是根据时间切换。例如夜间模式我引入的class是‘bgp_night’,接下来可以在全局引入一个BGP.css,里面是不同class后缀对应的background-image。

css">.mask{
	position:fixed;
	bottom:0;
	top:0;
	left:0;
	right:0;
}

.bgp_night {
 	z-index: -1;
 	background-image: url('xxx');
 }

样式

看明白了上面背景图的切换方法,样式也是一样的,建议将所有可以改变的样式写到一个css里,这样不同的皮肤分别对应一个不同名称的css,将这些css全部引入,用上面的方法改变绑定的class名称即可。
举一个小小的例子:

  • 这是全局默认皮肤css中的一小部分
css">/*******************PAGES*******************/
/*Index*/
.INDEX .welcometag {
	opacity: 0.7;
	background-color: #007AFF;
	border-radius: 0 0 10rpx 10rpx;
	color: #FFFFFF;
}
  • 这是夜间模式_night.css中对应的一部分
css">/*******************PAGES*******************/
/*Index*/
.INDEX_night .welcometag {
	opacity: 0.4;
	background-color: #007AFF;
	border-radius: 0 0 10rpx 10rpx;
	color: #FFFFFF;
}

可以看到我是用的方法是:在页面最顶层的view里绑定一个动态的class,页面下面的所有部件class根据最顶层的.INDEX+后缀而改变

<template>
	<keep-alive>
		<view class="main" :class="computedClass">
computed: {
	computedClass() {
		return 'INDEX' + getApp().globalData.classsuffix
	},
},

http://www.niftyadmin.cn/n/1868433.html

相关文章

电路滤波器——(一)RLC无源滤波器

让我们先掌握&#xff08;复习&#xff09;最基本的电路概念&#xff0c;包括RLC的拉式&#xff08;傅里叶&#xff09;变换&#xff0c;系统函数H(ω)H(\omega)H(ω)等…大部分资源来源于网络&#xff0c;本篇文章作为一个整理&#xff0c;欢迎大家纠错和补充。接下来会更新有…

电路滤波器——(二)RC有源滤波器

RC有源滤波器 有源滤波器&#xff1a; 优点&#xff1a;不使用电感&#xff0c;体积小&#xff1b;可放大信号且倍数易调节&#xff1b;可加入电压串联负反馈&#xff0c;是输入电阻高&#xff0c;输出电阻低&#xff0c;输入输出之间有良好的隔离。缺点&#xff1a;可靠性差…

在keil中使用JLINK进行下载时的种种问题

在设备管理器中寻找插入的JLINK设备&#xff0c;存在以下两种情况&#xff1a; 无法正确识别设备 这种情况下一般需要通过硬件上的短接擦除Flash&#xff0c;复制原有固件&#xff0c;刷入V8固件。详细方法能搜到很多&#xff0c;一般win10用sam-ba_2.12程序烧录固件&#xff…

面向初学者的物联网全栈开发指南 - 1 - 前言与技术路线

欢迎来到我的新专栏&#xff0c;本系列面向具备一定单片机或嵌入式系统开发基础的物联网初学者&#xff0c;旨在介绍新一代的物联网全栈开发流程。物联网是当今最火热的技术之一&#xff0c;其所依赖的平台已经发展的非常成熟&#xff0c;但面对种类繁多的平台和路线&#xff0…

面向初学者的物联网全栈开发指南 - 2 - 初始化ESP8266

在本章&#xff0c;我们将学习ESP-01的使用方法&#xff0c;MCU与该芯片的通信。强烈建议在调试时要分开调试&#xff0c;例如先通过电脑调试ESP-01&#xff0c;一切工作正常后&#xff0c;再通过电脑调试MCU&#xff0c;两边都处于理想工作状态后&#xff0c;再将MCU与ESP-01对…

java comparable用法_java-如何在类中使用Comparable作为泛型参数

我在数据结构课程中有家庭作业,问题是&#xff1a;实现双链表类.方法&#xff1a;>显示()> length()或size()> insertSorted(可比较)> insertToEnd(可比)> insertToHead(可比较)>删除(可比)>布尔搜索(可比)您必须在JAVA中执行此操作创建一个应用程序层来测…

dmx512 java_DMX512控制协议及其实现

【实例简介】实现DMX512标准协议,对灯光进行控制.照明工程学报2002年9月数据时序要求的控制信息数据包,为了达到250kb/s了满足数据的时序要求并提高单片机处理的速度,波特率的异步11位数据传送的要求,控制器端单片单片机应采用16M晶振。接收端相关程序流程图机可工作在方式2状态…

java 通知 客户端_java – 更新时从服务器到客户端的RMI通知

我正在写一个假的运送应用程序.客户端发送产品,服务器保留所有发送的产品.现在服务器 – 因为它只是虚拟的 – 每分钟更新产品的状态(SEND – > ACCEPTED – > SHIPPED – > RECEIVED),现在我希望服务器在更新状态时更新相应的客户端.我所讨论的大多数RMI信息只涉及客…