Home Web Front-end JS Tutorial How to implement simple skin changing function using vue + less

How to implement simple skin changing function using vue + less

Jun 05, 2018 pm 04:59 PM
less vue

Below I will share with you an example of using vue less to implement a simple skin change function. It has a good reference value and I hope it will be helpful to everyone. The skin change effect done by

is relatively simple, just changing the background color of the top navigation. The following is the rendering.

First of all, let me talk about my initial thoughts.

My initial idea was to use less to define variables, and then switch the variables through js, and achieve the skin-changing effect through the switched variables.

I first created a new theme.less file, the code is as follows:

 @theme:@themea;
 @themea:pink;
 @themeb:blue;
 @themec:gray;
Copy after login

As my original idea, the variable @theme should be changed through the click event value.

I used the element-ui framework, so the code for my drop-down menu is not complicated:

<el-dropdown class="colorBtn " trigger="click" @command="changeColor">
 <span class="el-dropdown-link " >换肤</span>
 <el-dropdown-menu slot="dropdown">
 <el-dropdown-item command="a" @click="change_type(a)">梦幻粉</el-dropdown-item>
 <el-dropdown-item command="b" @click="change_type(b)">天空蓝</el-dropdown-item>
 <el-dropdown-item command="c" @click="change_type(c)">雾霾灰</el-dropdown-item>
 </el-dropdown-menu>
</el-dropdown>
Copy after login

The callback event of the click event is bound to the command event, I defined a changeColor method

  changeColor(command){
  console.log(command);//能获取到当前点击的元素的command
 }
Copy after login

So, the question arises, how do I change the value of @theme through a click event? I fell into deep (searching) thinking (thinking)...

Finally I found a roundabout way to solve the problem. In fact, there was nothing wrong with the original idea, but it needed to be repackaged. How to package it? Although we cannot control the variable value for the time being, we can control the class name of the element.

We can extract the skinned part and use the less function to represent it, and change the theme.less code to the following code

where @backcolor is the background color and @fcolor is the font Color

.theme(@backcolor:#EEA2AD,@fcolor:#fff) {
 .header {
 color: @fcolor;
 background: @backcolor;
 width: 100%;
 height: 2rem;
 position: relative;

 h4 {
  width: 100%;
  text-align: center;
  line-height: 2rem;
  font-size: 1rem;
 }
 .go-back {
  width: 2rem;
  height: 2rem;
  text-align: center;
  color: #fff;
  font-size: 0.8rem;
  float: left;
  line-height: 2rem;
  margin-left: 1rem;
  position: absolute;
  left: 0;
  top: 0;
 }
 .header-cont {
  width: 100%;
  text-align: center;
  line-height: 2rem;
  font-size: 1rem;
  color: #fff;
 }
 .colorBtn {
  width: 2rem;
  height: 2rem;
  text-align: center;
  color: #fff;
  font-size: 0.8rem;
  line-height: 2rem;
  margin-right: 1rem;
  position: absolute;
  top: 0;
  right: 0;
 }
 }
}
Copy after login

Create a new color.less and set several different skin styles. The different skin styles here are represented by themea, themeb, themec..., which correspond to the command value in the component. When I click on the pink color, the corresponding function is called to add the corresponding class name to the element. Don’t forget to quote theme.less

 @import url(&#39;./theme.less&#39;);
  .themea{
   .theme();//默认的样式
  }
  .themeb{
   .theme(blue,#fff);
  }
  .themec{
   .theme(#111,#999);
  }
Copy after login

When you click on the skinned drop-down menu, the changeColor method called needs to add a different class name to the element. Of course, remember to quote the color.less file.

 changeColor(command){
  console.log(command);
  document.getElementById(&#39;app&#39;).className =&#39;theme&#39;+command ;
 }
Copy after login

When working on this piece, I also encountered a problem at the beginning, that is, I only extracted the style of this page separately at the beginning, so the head styles of other components did not change. My first thought was to use cookies. Well, then I thought that since it is a single page, is it okay for me to bind the style to a top-level element?

The result is obvious! ! !

If you want to remember the last skin change, I use localStorage to record the theme of each click to change the skin, and then determine whether there is such a theme before rendering the page. The effect is as follows

The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.

Related articles:

About the problem of extracting project-related configuration files when vue-cli is packaged (detailed tutorial)

Problems with routing permission management using Vue (detailed tutorial)

About the method of inserting variable parameters in vue.js tag attributes (detailed tutorial)

The above is the detailed content of How to implement simple skin changing function using vue + less. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to use bootstrap in vue How to use bootstrap in vue Apr 07, 2025 pm 11:33 PM

Using Bootstrap in Vue.js is divided into five steps: Install Bootstrap. Import Bootstrap in main.js. Use the Bootstrap component directly in the template. Optional: Custom style. Optional: Use plug-ins.

How to reference js file with vue.js How to reference js file with vue.js Apr 07, 2025 pm 11:27 PM

There are three ways to refer to JS files in Vue.js: directly specify the path using the &lt;script&gt; tag;; dynamic import using the mounted() lifecycle hook; and importing through the Vuex state management library.

How to add functions to buttons for vue How to add functions to buttons for vue Apr 08, 2025 am 08:51 AM

You can add a function to the Vue button by binding the button in the HTML template to a method. Define the method and write function logic in the Vue instance.

How to use watch in vue How to use watch in vue Apr 07, 2025 pm 11:36 PM

The watch option in Vue.js allows developers to listen for changes in specific data. When the data changes, watch triggers a callback function to perform update views or other tasks. Its configuration options include immediate, which specifies whether to execute a callback immediately, and deep, which specifies whether to recursively listen to changes to objects or arrays.

What does vue multi-page development mean? What does vue multi-page development mean? Apr 07, 2025 pm 11:57 PM

Vue multi-page development is a way to build applications using the Vue.js framework, where the application is divided into separate pages: Code Maintenance: Splitting the application into multiple pages can make the code easier to manage and maintain. Modularity: Each page can be used as a separate module for easy reuse and replacement. Simple routing: Navigation between pages can be managed through simple routing configuration. SEO Optimization: Each page has its own URL, which helps SEO.

How to return to previous page by vue How to return to previous page by vue Apr 07, 2025 pm 11:30 PM

Vue.js has four methods to return to the previous page: $router.go(-1)$router.back() uses &lt;router-link to=&quot;/&quot; component window.history.back(), and the method selection depends on the scene.

How to query the version of vue How to query the version of vue Apr 07, 2025 pm 11:24 PM

You can query the Vue version by using Vue Devtools to view the Vue tab in the browser's console. Use npm to run the "npm list -g vue" command. Find the Vue item in the "dependencies" object of the package.json file. For Vue CLI projects, run the "vue --version" command. Check the version information in the &lt;script&gt; tag in the HTML file that refers to the Vue file.

How to use vue traversal How to use vue traversal Apr 07, 2025 pm 11:48 PM

There are three common methods for Vue.js to traverse arrays and objects: the v-for directive is used to traverse each element and render templates; the v-bind directive can be used with v-for to dynamically set attribute values ​​for each element; and the .map method can convert array elements into new arrays.

See all articles