示例效果:

功能点分析:

1.点击switch开关,切换主题皮肤(包括标题栏、底部tabBar);
2.把皮肤设置保存到全局变量,在访问其它页面时也能有效果
3.把设置保存到本地,退出应用再进来时,依然加载上次设置的皮肤

步骤:

1、需要切换的皮肤:新建一个skin目录,下面写一个skin.wxss

black_box就是最外面,也是最大的盒子(除了默认的page哈);  black_box就是切换的皮肤;

还有关键一步,在app.wxss文件中把这个皮肤文件引入,因为换肤是所有页面都变化

  1. @import "skin/skin.wxss";

通过控制skinStyle的值“black”来改变皮肤样式,我们还能写个blue_box的皮肤,然后设置变量为skinStyle为blue就行了

 
<view class="container {{skinStyle}}_box"></view>

2、switch开关:

user.wxml:

 
<view class="container {{skinStyle}}_box"> 
   <switch bindchange="switchChange" color ="#ef384a" class="switch" checked='{{skinSwitch}}'/>
</view>

user.js:根据皮肤开关设置皮肤模式(包括标题栏、tabBar等),并保存到本地; 最后,在每个页面,包括切换皮肤的页面的Page中的onLoad事件里,设置标题栏背景及SkinStyle的值;

  1. const app = getApp()
  2.  
  3. Page({
  4. data: {
  5. skinStyle: '',
  6. },
  7. //皮肤开关
  8. switchChange: function (e) {
  9. var that = this;
  10. //开启
  11. if (e.detail.value == true) {
  12. app.globalData.skin = "black"
  13. app.setSkinBlackTitle(); //设置标题栏
  14. app.globalData.skinSwitch = true
    app.setBlackTabBar(); //设置tabBar
  1. } else {
  2. app.globalData.skin = 'normal'
  3. app.setSkinNormalTitle()
  4. app.globalData.skinSwitch = false
    app.setNormalTabBar();
  1. }
  2. that.setData({
  3. skinStyle: app.globalData.skin
  4. })
  5. //保存到本地
  6. wx.setStorage({
  7. key: "skin",
  8. data: app.globalData.skin
  9. })
  10. wx.setStorage({
  11. key: "skinSwitch",
  12. data: app.globalData.skinSwitch
  13. })
  14. },
  15.  
  16. onLoad: function (options) {
  17. app.setNavBarBg();//设置标题栏背景色
  18. var that = this     
  19. that.setData({
  20. skinStyle: app.globalData.skin,
  21. skinSwitch: app.globalData.skinSwitch
  22. })
  23. }
  24. })

app.js:

在app.js的文件中,Page里的globalData中设置:skin:"normal",即默认为normal皮肤;tabBar数据配置;

我们要在程序打开时就获取皮肤设置,所以要在app.js去get与皮肤、标题、tabBar相关的信息:getSkin()

  1. //app.js
  2. App({
  3. onLaunch: function () {
  4. console.log('进入app');
  5. // 展示本地存储能力
  6. var logs = wx.getStorageSync('logs') || []
  7. logs.unshift(Date.now())
  8. wx.setStorageSync('logs', logs)
  9.  
  10. this.login();

  11. this.getSkin();
  12. },
  13. globalData: {
  14. userInfo: null,
  15. skin: 'normal',
  16. skinSwitch: '',
  17. },
  18.  
  19. //设置tabBar -- 默认模式
  20. setNormalTabBar(){
  21. wx.setTabBarItem({
  22. index: 0,
  23. text: '首页',
  24. iconPath: "images/icons/home_1.png",
  25. selectedIconPath: "images/icons/home_2.png",
  26. })
  27. wx.setTabBarItem({
  28. index: 1,
  29. text: '报名',
  30. iconPath: "images/icons/apply_1.png",
  31. selectedIconPath: "images/icons/apply_2.png",
  32. })
  33. wx.setTabBarItem({
  34. index: 2,
  35. text: '我的',
  36. iconPath: "images/icons/user_1.png",
  37. selectedIconPath: "images/icons/user_2.png",
  38. })
  39. wx.setTabBarStyle({
  40. color: '#7f8389',
  41. selectedColor: '#329fff',
  42. backgroundColor: '#f7f7fa',
  43. borderStyle: 'black'
  44. })
  45. },
  46. //设置tabBar -- 黑色模式
  47. setBlackTabBar(){
  48. wx.setTabBarItem({
  49. index: 0,
  50. text: '首页',
  51. iconPath: "images/icons/icon_home_1.png",
  52. selectedIconPath: "images/icons/icon_home_2.png",
  53. })
  54. wx.setTabBarItem({
  55. index: 1,
  56. text: '报名',
  57. iconPath: "images/icons/icon_apply_1.png",
  58. selectedIconPath: "images/icons/icon_apply_2.png",
  59. })
  60. wx.setTabBarItem({
  61. index:2,
  62. text: '我的',
  63. iconPath: "images/icons/icon_user_1.png",
  64. selectedIconPath: "images/icons/icon_user_2.png",
  65. })
  66. wx.setTabBarStyle({
  67. color: '#2e3136',
  68. selectedColor: '#ef384a',
  69. backgroundColor: '#ffffff',
  70. borderStyle: 'black'
  71. })
  72. },
  73. //皮肤
  74. getSkin: function () {
  75. var that = this
  76. wx.getStorage({
  77. key: 'skin',
  78. success: function (res) {
  79. that.globalData.skin = res.data
  80. if (that.globalData.skin == 'normal') {
  81. that.globalData.skinSwitch = false
  82. that.setSkinNormalTitle()
  83. that.setNormalTabBar();
  84. } else {
  85. that.globalData.skinSwitch = true
  86. that.setSkinBlackTitle()
  87. that.setBlackTabBar()
  88. }
  89. }
  90. })
  91. },
  92.  
  93. //导航栏标题背景
  94. setNavBarBg: function () {
  95. var that = this
  96. if (that.globalData.skin == "normal") {
  97. that.setSkinNormalTitle()
  98. } else {
  99. that.setSkinBlackTitle()
  100. }
  101. },
  102. setSkinBlackTitle: function () {
  103. wx.setNavigationBarColor({
  104. frontColor: '#ffffff',
  105. backgroundColor: '#2e3136',
  106. })
  107. },
  108. setSkinNormalTitle: function () {
  109. wx.setNavigationBarColor({
  110. frontColor: '#000000',
  111. backgroundColor: '#ffffff',
  112. })
  113. },
  114. });

微信小程序 主题皮肤切换(switch开关)的更多相关文章

  1. 微信小程序换皮肤,动态切换菜单栏和导航栏的样式,动态修改TabBar和NavigationBar

    在做微信小程序换皮肤的时候,需要动态修改菜单栏(TabBar)和导航栏(NavigationBar) 但是在小程序中它们的样式是写在app.json里面,而且app.json是静态编译,运行时哪怕你修 ...

  2. 微信小程序写tab切换

    微信小程序之tab切换效果,如图: 最近在学习微信小程序并把之前的公司app搬到小程序上,挑一些实现效果记录一下(主要是官方文档里没说的,毕竟官方文档只是介绍功能) .wxml代码: <view ...

  3. 微信小程序Tab选项卡切换大集合

    代码地址如下:http://www.demodashi.com/demo/14028.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  4. 微信小程序左右滑动切换页面示例代码--转载

    微信小程序——左右滑动切换页面事件 微信小程序的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend. 这三个事件最重要的属性是pageX和pageY,表示X, ...

  5. 微信小程序开发--路由切换,页面重定向

    这段时间开发了一个微信小程序,虽然小程序的导航API 官方文档写得很详细,但是在具体开发过程中还是会遇到很多不明白,或者一时转不过弯的地方. 1.页面切换传参,参数读取 1.1  wx.navigat ...

  6. 微信小程序左右滑动切换图片酷炫效果

    开门见山,先上效果吧!感觉可以的用的上的再往下看. 心动吗?那就继续往下看! 先上页面结构吧,也就是wxml文件,其实可以理解成微信自己封装过的html,这个不多说了,不懂也没必要往下看了. < ...

  7. 微信小程序左右滑动切换图片酷炫效果(附效果)

    开门见山,先上效果吧!感觉可以的用的上的再往下看. 心动吗?那就继续往下看! 先上页面结构吧,也就是wxml文件,其实可以理解成微信自己封装过的html,这个不多说了,不懂也没必要往下看了. < ...

  8. 微信小程序标签页切换

    WXML中: <view class="swiper-tab"> <view class="swiper-tab-list {{currentTab== ...

  9. 微信小程序之 catalog 切换

    组件名称:catalog 组件属性:catalogData,type:String 组件描述:这是一个子组件,数据从父组件中传递 效果图: catalog 目录为多个,使用 scroll-view 容 ...

随机推荐

  1. 47. List中特有的方法

    集合的体系:--------------| Collection  单列集合的根接口----------| List 如果实现了List接口的集合类,该类具备的特点是:有序,可重复---------- ...

  2. 关于CheckListBox触发ItemCheck事件的问题

    开发时遇到一个有趣的问题,我们需要CheckListBox可以实现单选功能,因为默认是多选的,开始我写的代码如下: void cb_ItemCheck(object sender,ItemCheckE ...

  3. noip 2014 总结

    2014 年的noip 已经结束了,成绩从个人而言不是特别的理想,从今年题的逗的程度,本来是个xxx 就被玩脱了= = 当然现在后悔事没有用的了,不过第二天全屏技术的在最后一小时看到了两道题的错误,然 ...

  4. markdown常用数学符号小结

    (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 markdown使用LaTex输入数学公式类 Markdown数学符号&公式 CSDN-MarkDown编辑器使用手册(4)- ...

  5. STM32F427VI 电流

  6. Codeforces 1166A - Silent Classroom

    题目链接:http://codeforces.com/problemset/problem/1166/A 思路:统计所有首字母出现的次数,由贪心可知对半分最少. AC代码: #include<i ...

  7. [01]APUE:sysconf / pathconf

    sysconf / pathconf:用于运行时确定特定系统实际支持的限制值 sysconf 函数的参数格式: “_SC_ + 限制项名称”,如:CHILD_MAX 限制值指每个实际用户 ID 可以启 ...

  8. html清除浮动的6种方法示例

    使用display:inline-block会出现的情况: 1.使块元素在一行显示2.使内嵌支持宽高3.换行被解析了4.不设置的时候宽度由内容撑开5.在IE6,7下步支持块标签 由于inline-bl ...

  9. Unity实现Android端视频播放

    本文只讲Android短的视频播放 实现方式 使用Handheld.PlayFullScreenMovie(),这个函数实现.具体如下: 1.创建StreamingAssets文件夹,此文件夹放入视频 ...

  10. 多版本JDK 切换

    由于一些原因,我本机存在3个版本的jdk. 但是发现,单纯去 修改环境变量,并没有效果. 那么我们下面看看怎么改 1 查看本机版本    java -version 2 查看jdk路径   where ...