在vue中关于元素选中效果遇到的问题

场景:在页面左侧渲染出一堆按钮,给每个按钮绑定选中放大的效果,选中哪个,哪个就放大,并且整个页面只能有一个按钮有选中放大的效果
问题:我在css中绑定了:focus,点击后可以放大,但不小心点击到页面其他部分时,效果会消失
需求:想让按钮选中后放大,不管点击哪里,效果一直存在

img

为何不用伪类 :active ?

把当前选中的index值set到data里面,渲染的时候判断下就可以了

【以下回答由 GPT 生成】

在Vue中实现按钮选中后一直保持放大效果的需求,可以通过以下步骤实现:

  1. 在Vue组件中,为每个按钮添加一个isSelected的data属性,用于标记按钮是否被选中。初始状态下,将isSelected设置为false
data() {
  return {
    isSelected: false
  }
}
  1. 在按钮的模板中,根据isSelected的值为按钮添加相应的样式。可以使用Vue的条件渲染指令v-bindv-bind:class来实现。
<button v-bind:class="{ 'selected': isSelected }" @click="isSelected = !isSelected">按钮</button>

其中,selected是在CSS中定义的选中样式。

  1. 在CSS中定义选中样式。可以根据需要,设置按钮的放大效果。
.selected {
  transform: scale(1.2);
}
  1. 可以使用Vue的点击事件绑定@click来实现按钮的点击事件,并通过设置isSelected的值来控制按钮的选中状态。
methods: {
  toggleSelected() {
    this.isSelected = !this.isSelected;
  }
}
  1. 如果希望点击页面其他部分时,选中效果仍然存在,可以在Vue组件的根元素上添加一个外部点击事件监听器。当点击页面其他部分时,如果按钮没有被点击,可以将isSelected设置为false
mounted() {
  document.addEventListener('click', this.handleOutsideClick);
},
beforeDestroy() {
  document.removeEventListener('click', this.handleOutsideClick);
},
methods: {
  handleOutsideClick(event) {
    if (!this.$el.contains(event.target)) {
      this.isSelected = false;
    }
  }
}

通过以上步骤,就可以实现在Vue中按钮选中后一直保持放大效果的需求。

请注意,由于没有完整的代码和详细的需求说明,以上只是一个示例实现方案。具体实现方式可能需要根据实际情况进行调整。若有更详细的需求或代码示例,可以提供更多信息以便给出更精确的解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^