VUE如何实现点击文字添加颜色(动态修改class)

 更新时间:2023年11月16日 09:38:36   作者:前端李小白  
这篇文章主要介绍了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>

效果如下,点击‘总的’话,部分会全部不变,点击‘部分’,全部会不变

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用vue-video-player实现直播的方式

    使用vue-video-player实现直播的方式

    在开发期间使用过video.js、mui-player等插件,发现这些video插件对移动端的兼容性都不友好,最后发现一个在移动端兼容不错的插件vue-video-player,下面通过场景分析给大家介绍使用vue-video-player实现直播的方法,感兴趣的朋友一起看看吧
    2022-01-01
  • idea部署RuoYi-Vue分离版的图文详解

    idea部署RuoYi-Vue分离版的图文详解

    RuoYi-Vue是一款基于SpringBoot+Vue的前后端分离极速后台开发框架, 本文主要介绍了idea部署RuoYi-Vue分离版的图文详解,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • 前端储存之localStrage、sessionStrage和Vuex使用

    前端储存之localStrage、sessionStrage和Vuex使用

    localStorage、sessionStorage和Vuex是三种不同的客户端存储方式,用于在浏览器中保存数据,localStorage和sessionStorage都是以键值对的形式存储数据,但localStorage存储的数据在关闭浏览器后仍然存在
    2025-01-01
  • 如何利用vite快速搭建vue3项目

    如何利用vite快速搭建vue3项目

    这篇文章主要介绍了如何利用vite快速搭建vue3项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 前端Vue学习之购物车项目实战记录

    前端Vue学习之购物车项目实战记录

    购物车是电商必备的功能,可以让用户一次性购买多个商品,下面这篇文章主要给大家介绍了关于前端Vue学习之购物车项目的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • 浅谈vue获得后台数据无法显示到table上面的坑

    浅谈vue获得后台数据无法显示到table上面的坑

    这篇文章主要介绍了浅谈vue获得后台数据无法显示到table上面的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue 3.0使用element-plus按需导入方法以及报错解决

    vue 3.0使用element-plus按需导入方法以及报错解决

    Vue3是不能直接使用Element-ui了,需要换成Element-plus,下面这篇文章主要给大家介绍了关于vue 3.0使用element-plus按需导入方法以及报错解决的相关资料,需要的朋友可以参考下
    2024-02-02
  • vue实现全选功能

    vue实现全选功能

    这篇文章主要为大家详细介绍了vue实现全选功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Vue.js项目在IE11白屏报错的解决方法

    Vue.js项目在IE11白屏报错的解决方法

    本文主要介绍了Vue.js项目在IE11白屏报错的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • vue中手机号,邮箱正则验证以及60s发送验证码的实例

    vue中手机号,邮箱正则验证以及60s发送验证码的实例

    下面小编就为大家分享一篇vue中手机号,邮箱正则验证以及60s发送验证码的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03

最新评论