【Angular】切换网页主题颜色

1.Angular代码

scss代码:

.theme-wrapper {
    --cardBackgroundColor: #0094ff;
    --cardColor: #ffffff;
}

$variables: (
    --cardColor: var(--cardColor),
    --cardBackgroundColor: var(--cardBackgroundColor),
);

@function var($variable) {
    @return map-get($variables, $variable);
}

.card {
    background-color: var(--cardBackgroundColor);
    color: var(--cardColor);
    height: 200px;
    width: 200px;
    margin: 10px auto;
}

html代码:

<div id="theme-wrapper" class="theme-wrapper">
  <div class="card"></div>
</div>

<input #colorSelector type="color">
<button (click)="changeToRed(colorSelector.value)">改变颜色</button>

component代码:

changeToRed(color: any) {
  const themeWrapper = document.getElementById('theme-wrapper');
  themeWrapper.style.setProperty('--cardBackgroundColor', color);
}

以上代码在Chrome中没有问题,但是在IE中却无法正常运行。

2. 支持IE浏览器的写法

引入插件:

npm install css-vars-ponyfill

angular.json中引入js文件:

"scripts": [
	"node_modules/css-vars-ponyfill/dist/css-vars-ponyfill.js"
]

ts文件如下:

import cssVars from 'css-vars-ponyfill';

export class AppComponent {
  constructor() {
  	// 初始化颜色
    cssVars({
      variables: {
        '--cardBackgroundColor': 'red'
      }
    });
  }

  /**
   * 改变颜色
   * @param color 颜色
   */
  changeToRed(color: any) {
    cssVars({
      variables: {
        '--cardBackgroundColor': color
      }
    });
  }
}

css文件如下:

.card {
    background-color: var(--cardBackgroundColor);
    height: 200px;
    width: 200px;
    margin: 10px auto;
}

html代码如下:

<div class="card"></div>

<input #colorSelector type="color">
<button (click)="changeToRed(colorSelector.value)">改变颜色</button>

3. 在IE中显示颜色选择器

<input type="color">默认在IE中是无法显示的,如需显示,可参考以下网址:
https://www.npmjs.com/package/jquery-colpick


版权声明:本文为hushukang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。