在日常的开发中,我们常常遇到这样的需求:点击一个button改变页面中某个元素的样式,在这样的场景中,我们可以使用v-bind绑定css中的var变量,来动态的切换元素的样式
一个小栗子,在setup语法糖环境下,点击一个button动态切换另一个元素的背景色
javascript
<template>
<div class="box">
<div class="intro">
<div class="btxt" :style="{'--text-color':textColor}">使用v-bind绑定语法糖中的颜色常量的值给style中的变量</div>
</div>
<div class="intro">
<div class="btn" @click="changeColor">点击button改变textColor的值,动态更新颜色的值</div>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
const textColor = ref("blue");
const changeColor = () => {
if (textColor.value === "blue") {
textColor.value = "pink";
} else {
textColor.value = "blue"
}
};
</script>
<style scoped lang="less">
.box{
display: flex;
flex-direction: column;
.intro{
background-color: antiquewhite;
margin: 10px;
padding: 15px;
.btn{
display: inline-block;
padding: 18px 35px 18px 35px;
}
}
}
.btxt{
padding: 18px 35px 18px 35px;
color: var(--text-color);
}
</style>
一个小栗子,在非setup语法糖的环境下使用v-bind绑定css中的var变量,实现当鼠标悬停在一个button上时配置button的伪类hover中的背景色,点击button后通过切换var变量对应的颜色值,动态切换button的背景色,代码如下:
javascript
<template>
<div class="box">
<div class="btn" :style="{'--color-back':backColor}" @click="changeEvent">
使用v-bind绑定非setup语法糖环境下的style值
</div>
</div>
</template>
<script>
export default{
name:"ChangeButton",
data(){
return {
backColor: "cadetblue"
}
},
methods:{
changeEvent(){
let color = this.$data.backColor
if (color === "cadetblue") {
this.$data.backColor = "orange"
} else {
this.$data.backColor = "cadetblue"
}
}
}
}
</script>
<style scoped lang="less">
.box{
.btn{
background-color: var(--color-back);
display: inline-block;
padding: 18px 35px 18px 35px;
border-radius: 5px;
}
}
.btn:hover{
background-color: lightgrey;
}
.btn:active{
animation: changeck 0.3s ease;
}
@keyframes changeck {
0% {
transform: scale(1);
}
50% {
transform: scale(0.95);
}
100% {
transform: scale(1);
}
}
</style>
javascript
<template>
<div class="box">
<div class="intro">
<change-button></change-button>
</div>
</div>
</template>
<script setup>
import ChangeButton from './components/index.vue'
</script>
<style scoped lang="less">
.box{
display: flex;
flex-direction: column;
}
</style>