uniapp实现全局切换任意主题功能

基于uniapp+vuex实现的切换任意主题功能,基本测试没有问题,下面记录一下实现步骤及原理

1.根据自己的需求创建scss文件,下面贴一下代码

我这里是放在common/css/theme.scss文件中

.CyanTheme{
	.bgColor{
		background-color: #e6fbf3
	}
	.textColor{
		color: #999999;
	}
	.textThColor{
		color:#24ba97;
	}
	.borderColor{
		border-color:  #ccf7e7;
	}
}

.DarkTheme{
	.bgColor{
		background-color: #292929
	}
	.textColor{
		color: #fff;
	}
	.textThColor{
		color:#ccf7e7;
	}
	.borderColor{
		border-color:  #000;
	}
}
2.在app.vue中引入自定义的scss
<style lang="scss">
	/*每个页面公共css */
	@import '@/common/css/theme.scss';
</style>
3.vuex进行全局调用处理,引用你们自己封装的vuex方法
//基于自己的vuex使用方式将字段加入,默认给一个主题色,为了下次启动应用主题色不被重置最好做持久化储存处理,我这里是会存到本地数据的
vuex_theme: $theme.vuex_theme || 'CyanTheme' //主题色
4.页面中使用及切换方法

我这里只做演示,没有封装处理,你们可以自行处理一下

将每个页面的最外层元素加上vuex内的主题名称 :class="vk.getVuex('$theme.vuex_theme')",

内部元素的css会根据scss的外层类名进行相应的展示,所以只需要更改最外层的类型就能实现主题动态切换,当然要使用之前定义好的全局类名

<template>
	<view class="container" :class="vk.getVuex('$theme.vuex_theme')">

		<view class="textColor bgColor" @click="theme">本项目已包含uni
			ui组件,无需import和注册,可直接使用。在代码区键入字母u,即可通过代码助手列出所有可用组件。光标置于组件名称处按F1,即可查看组件文档。</view>
	</view>
</template>


data() {
			return {
				href: 'https://uniapp.dcloud.io/component/README?id=uniui',
				themeType: 1
			}
		},
		methods: {
			theme() {
				//这里只做演示,死数据,根据自己代码更改
				if (this.themeType === 1) {
					console.log(111);
					this.themeType = 2;
					vk.setVuex('$theme.vuex_theme', 'DarkTheme');
					uni.setTabBarStyle({
						color: '#ddd',
						selectedColor: '#fff',
						backgroundColor: '#111',
						borderStyle: '#000'
					})
				} else {
					this.themeType = 1;
					vk.setVuex('$theme.vuex_theme', 'CyanTheme');
					uni.setTabBarStyle({
						color: '#696969',
						selectedColor: '#111',
						backgroundColor: '#ccf7e7',
						borderStyle: '#24ba97'
					})
				}
			}
		}

贴一下gif图

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在uniapp实现全局分享功能,你可以按照以下步骤进行操作: 1. 在`App.vue`中的`onLaunch`生命周期方法中,调用uni的`getShareInfo`方法获取分享信息。示例代码如下: ```javascript onLaunch: function() { uni.getShareInfo({ success: res => { // 在这里处理分享信息 } }); } ``` 2. 在需要分享的页面中,使用uni提供的分享组件,例如`uni-share-button`。示例代码如下: ```html <template> <view> <uni-share-button :title="shareTitle" :path="sharePath" :imageUrl="shareImageUrl" @success="onShareSuccess" > 分享 </uni-share-button> </view> </template> <script> export default { data() { return { shareTitle: '分享标题', sharePath: '/pages/index', shareImageUrl: '分享图片链接' }; }, methods: { onShareSuccess(res) { // 分享成功后的回调函数 } } }; </script> ``` 在上述代码中,你可以根据需求设置分享的标题、路径和图片链接。当用户点击分享按钮并成功分享时,`onShareSuccess`方法将被调用。 3. 在`manifest.json`文件中配置分享信息。示例代码如下: ```json "mp-weixin": { "appid": "yourAppId", "share": { "title": "分享标题", "path": "/pages/index", "imageUrl": "分享图片链接" } } ``` 在上述代码中,你需要将`yourAppId`替换为你的小程序AppId,同时设置分享的标题、路径和图片链接。 通过以上步骤,你就可以在uniapp实现全局分享功能了。当用户点击分享按钮时,将触发分享操作,同时你可以在分享成功的回调函数中进行相应的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值