VUE如何实现点击文字添加颜色(动态修改class)
作者:前端李小白
这篇文章主要介绍了VUE如何实现点击文字添加颜色(动态修改class),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
vue点击文字添加颜色(动态修改class)
实现的原理很简单,只需要动态绑定一个class就可以了,现在分别列出三种情况
1.点击文字颜色改变
再次点击,点击的颜色改变,之前的颜色变回原来的颜色
代码如下:
<template> <div class="list2"> <ul> <li v-for="(item,index) in List" :key="index" :class="{activeColor:colorIndex===index}" @click="changeColor(item,index)" > <span>{{item.name}}</span> </li> </ul> </div> </template>
<script> export default { name: "list", components: {}, data() { return { List: [ { name: "总的" }, { name: "部分1" }, { name: "部分2" }, { name: "部分3" } ], colorIndex: -1 }; }, mounted() {}, methods: { changeColor(item, index) { this.colorIndex = index; } } }; </script>
<style lang="less" scoped> .list2 { width: 100px; ul { list-style: none; .activeColor { background-color: #f6fbff; color: #298adb; } li { cursor: pointer; } } } </style>
效果如下,当我点击其中某一个文字的时候,字体的颜色就改变了
2.如果需要点击多个变颜色的话
再次点击取消的话,我是这样做的,给data里面的对象添加一个属性,全部设置为false,然后点击的时候设置为true,
代码如下:
<template> <div class="list2"> <ul> <li v-for="(item,index) in List" :key="index" :class="{activeColor:item.active}" @click="changeColor(item,index)" > <span>{{item.name}}</span> </li> </ul> </div> </template>
<script> export default { name: "list", components: {}, data() { return { List: [ { name: "总的" }, { name: "部分1" }, { name: "部分2" }, { name: "部分3" } ], colorIndex: -1 }; }, mounted() { this.addActive() }, methods: { /*给List的每一个对象添加active属性,需要用到this.$set('对象','键值','value') */ addActive(){ this.List.forEach(item=>{ this.$set(item,'active',false) }) }, changeColor(item, index) { if(!item.active){ item.active = true } else { item.active = false } } } }; </script>
<style lang="less" scoped> .list2 { width: 100px; ul { list-style: none; .activeColor { background-color: #f6fbff; color: #298adb; } li { cursor: pointer; } } } </style>
效果如下:点击多个文字可以改变样式,再次点击可以取消
3.有时候我们要是有个‘总的’
那个点击‘总的’,就不能有部分的存在了,点击部分就不能有‘总的’存在
代码如下:
<template> <div class="list2"> <ul> <li v-for="(item,index) in List" :key="index" :class="{activeColor:item.active}" @click="changeColor(item,index)" > <span>{{item.name}}</span> </li> </ul> </div> </template>
<script> export default { name: "list", components: {}, data() { return { List: [ { name: "总的" }, { name: "部分1" }, { name: "部分2" }, { name: "部分3" } ], colorIndex: -1 }; }, mounted() { this.addActive(); }, methods: { /*给List的每一个对象添加active属性,需要用到this.$set('对象','键值','value') */ addActive() { this.List.forEach(item => { this.$set(item, "active", false); }); }, changeColor(item, index) { if (index === 0) { this.List.forEach(item => { item.active = false; }); } else { this.List[0].active = false; } if (!item.active) { item.active = true; } else { item.active = false; } } } }; </script>
<style lang="less" scoped> .list2 { width: 100px; ul { list-style: none; .activeColor { background-color: #f6fbff; color: #298adb; } li { cursor: pointer; } } } </style>
效果如下,点击‘总的’话,部分会全部不变,点击‘部分’,全部会不变
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。