vue,小程序,实现一键无感换肤,切换主题

这篇博客介绍了如何在Vue.js应用中实现主题切换功能,包括在Vuex中创建存储位,全局引入并调用切换方法,以及在组件中监听和应用主题变化。主要涉及Vuex的状态管理和组件的响应式更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步现在store->index.js=> vuex里面创建一个存储位

export default new Vuex.Store({
	state: {
		appTheme: 'blue' //换肤
	},
	mutations: {
		//换肤
		TOGGLE_APP_THEME(state, color = 'blue') { 
			state.appTheme = color
		}
	},
	actions: {

	},
	getters: {
		appTheme: state => state.appTheme,
	}
})

第二步全局引入main.js

Vue.mixin({
	methods: {
		toggleAppTheme(color = 'blue') {
		   this.$store.commit('TOGGLE_APP_THEME', color);
		}
	},
	// created() {
	// 	  this.$store.commit('TOGGLE_APP_THEME', "blue");
	// }
})

第三步,在utils 文件新建index.js文件引入 store

import store from "../../store/index.js"
export function Color() {
	var stores = store.state.appTheme
	var white = '图片线上存储地址白色(图片名称保持一样)' 
	var black = '图片线上存储地址黑色(图片名称保持一样)'
	var obj = ColorList[0]
	// 增加需要根据换肤变换的图
	// 首先去除掉
	if (stores == 'white') {
		Object.keys(obj).forEach(function(key) {
			obj[key] = obj[key].replace(white, '');
			obj[key] = obj[key].replace(black, '');
			obj[key] = white + obj[key]
		})
		return obj
	} else {
		Object.keys(obj).forEach(function(key) {
			obj[key] = obj[key].replace(white, '');
			obj[key] = obj[key].replace(black, '');
			obj[key] = black + obj[key]
		})
		return obj
	}
}
export function Style(obj) {
	var stores = store.state.appTheme
	if (stores == 'white') {
		return whiteJosn
	} else {
		return blackJson
	}
}
export default {
	Color,
	Style
}
//需要更换的图片
const ColorList = [{
	"homeImg": '32.png',
}]
//需要更换的样式
const whiteJosn = {
	"Home": 'color:#5A688B'
}
const blackJson = {
	"Home": 'color:#5A688B'
}

第四步html页面,监听切换图片和style

    //引入换肤vuex 
 	import {
		mapGetters
	} from 'vuex'; 
    
	data() {
			return {
				ColorListChange: [],
				StyleJson: {}
			}
		},
	computed: {
			...mapGetters(['appTheme'])
	},
    
    watch: {
			appTheme(oldval, newval) {
				this.ColorListChange = this.$commit.Color()
				this.StyleJson = this.$commit.Style()
				console.log('11111', this.ColorList, this.ColorListChange)
			}
		},

页面绑定使用实例

	<view :style="StyleJson.Home" class="Home">

    </view>

    <image :src="ColorListChange.homeImg" mode=""></image>

切换换肤事件方法此方法绑定在main.js里面,详细看第二步

	<div class='qie'>
			<div   class='one' @tap="toggleAppTheme('white')">
					<div class='aaa'>
						切换白色
					</div>
				</div>
				<div   class='two'  @tap="toggleAppTheme('blue')">
					<div class='bbb'>
						切换黑色
					</div>
				</div>
		</div>

完结收工!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值