You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue+Bootstrap实现按钮点击切换颜色 再次点击恢复原色方案求助

实现方案

单个按钮实现(以ALL按钮为例)

核心思路是用Vue的响应式状态标记按钮是否激活,动态绑定Bootstrap按钮样式。

模板部分修改:

<button 
  :class="['btn', isAllActive ? 'btn-primary' : 'btn-success']" 
  @click="filterAll" 
  style="margin:2px;"
>
ALL
</button>

Vue实例/组件的data部分:

data() {
  return {
    isAllActive: false,
    // 保留原有其他数据
    genreArr: []
  }
},
methods: {
  filterAll() {
    this.isAllActive = !this.isAllActive
    // 保留原有其他过滤逻辑
  }
}

点击时切换isAllActive的布尔值,按钮样式会自动切换,你可以根据需求自行替换激活态的Bootstrap按钮类。

动态生成按钮实现

根据使用场景分两种常用实现:

场景1:单选(同一时间仅能选中一个分类按钮

用单个变量存储当前选中的分类值即可:

模板修改:

<div class="btn-group btn-group-toggle" v-for="gen in genreArr" data-toggle="buttons">
  <button 
    :class="['btn', activeGen === gen ? 'btn-danger' : 'btn-warning']"
    @click="filterOne(gen)"
    style="margin:2px;"
  >
  {{gen}}
  </button>
</div>

对应JS部分:

data() {
  return {
    activeGen: '', // 存储当前激活的分类
    genreArr: []
  }
},
methods: {
  filterOne(gen) {
    // 点击已激活的按钮则取消激活,否则切换为当前点击的分类
    this.activeGen = this.activeGen === gen ? '' : gen
    // 保留原有其他过滤逻辑
  }
}

场景2:多选(可同时选中多个分类按钮)

用数组存储所有已选中的分类:

模板修改:

<div class="btn-group btn-group-toggle" v-for="gen in genreArr" data-toggle="buttons">
  <button 
    :class="['btn', selectedGenres.includes(gen) ? 'btn-danger' : 'btn-warning']"
    @click="filterOne(gen)"
    style="margin:2px;"
  >
  {{gen}}
  </button>
</div>

对应JS部分:

data() {
  return {
    selectedGenres: [], // 存储所有已激活的分类
    genreArr: []
  }
},
methods: {
  filterOne(gen) {
    const index = this.selectedGenres.indexOf(gen)
    if (index > -1) {
      // 已选中则移除
      this.selectedGenres.splice(index, 1)
    } else {
      // 未选中则添加
      this.selectedGenres.push(gen)
    }
    // 保留原有其他过滤逻辑
  }
}

如果需要自定义激活态样式,直接在style标签中写自定义类替换上面绑定即可,无需引入其他依赖。

内容的提问来源于stack exchange,提问作者newmon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:15:04