点击高亮显示vue

在 Vue 3 中,点击一个区块并使其高亮显示的实现非常简单,可以通过动态绑定 CSS 类来完成。当用户点击某个区块时,使用 Vue 的 v-bind:class:class 动态地改变该区块的样式,从而达到高亮效果。

方案 1:使用 v-bind:class 动态绑定类

假设你有多个区块,点击某个区块时给它添加一个高亮的样式。

<template>
  <div class="container">
    <div
      v-for="(block, index) in blocks"
      :key="index"
      :class="{'highlight': selectedBlock === index}"
      class="block"
      @click="selectBlock(index)"
    >
      Block {{ index + 1 }}
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue';

// 定义区块数据
const blocks = [1, 2, 3, 4, 5];
const selectedBlock = ref(null);  // 当前选中的区块索引

// 点击区块时更新 selectedBlock
const selectBlock = (index) => {
  selectedBlock.value = index;
};
</script>

<style scoped>
.container {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

.block {
  width: 100px;
  height: 100px;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: lightgray;
  border: 2px solid #ccc;
  cursor: pointer;
}

.highlight {
  background-color: yellow; /* 高亮时的背景色 */
  border-color: red;         /* 高亮时的边框颜色 */
}
</style>

解释:

  • v-for: 循环渲染多个区块,每个区块的索引传递给 selectBlock 方法。
  • :class="{'highlight': selectedBlock === index}": 动态绑定类名。当 selectedBlock 等于当前区块的索引时,给该区块添加 highlight 类。
  • @click="selectBlock(index)": 点击区块时,调用 selectBlock 方法,更新 selectedBlock 的值。
  • selectedBlock: 这是一个响应式的变量,用于存储当前选中的区块的索引。
  • highlight: 是一个 CSS 类,在区块被选中时给该区块添加高亮效果(例如改变背景色和边框颜色)。
要实现移动高亮显示,可以利用 Vue 自带的过渡动画和数据绑定。 1. 在组件的 `data` 中声明一个 `activeIndex` 变量,用来记录当前高亮的索引值。 ```vue <template> <div> <ul> <li v-for="(item, index) in list" :key="index" @click="activeIndex = index"> {{ item }} </li> </ul> <div class="highlight" :style="{ top: activeIndex * itemHeight + 'px' }" v-show="activeIndex >= 0"></div> </div> </template> <script> export default { data() { return { list: ['item1', 'item2', 'item3', 'item4', 'item5'], activeIndex: -1, itemHeight: 40 // 列表项高度 } } } </script> ``` 2. 在 `<div>` 标签中添加一个名为 `highlight` 的 CSS 类,用来设置高亮效果的样式。 ```vue <template> <div> <ul> <li v-for="(item, index) in list" :key="index" @click="activeIndex = index"> {{ item }} </li> </ul> <div class="highlight" :style="{ top: activeIndex * itemHeight + 'px' }" v-show="activeIndex >= 0"></div> </div> </template> <script> export default { data() { return { list: ['item1', 'item2', 'item3', 'item4', 'item5'], activeIndex: -1, itemHeight: 40 // 列表项高度 } } } </script> <style> .highlight { position: absolute; left: 0; width: 100%; height: 40px; // 列表项高度 background-color: #f0f0f0; transition: top 0.3s ease-in-out; } </style> ``` 3. 绑定 `highlight` 样式中的 `top` 属性到 `activeIndex` 变量,并且使用 `v-show` 指令控制高亮效果的显示。 ```vue <template> <div> <ul> <li v-for="(item, index) in list" :key="index" @click="activeIndex = index"> {{ item }} </li> </ul> <div class="highlight" :style="{ top: activeIndex * itemHeight + 'px' }" v-show="activeIndex >= 0"></div> </div> </template> <script> export default { data() { return { list: ['item1', 'item2', 'item3', 'item4', 'item5'], activeIndex: -1, itemHeight: 40 // 列表项高度 } } } </script> <style> .highlight { position: absolute; left: 0; width: 100%; height: 40px; // 列表项高度 background-color: #f0f0f0; transition: top 0.3s ease-in-out; } </style> ``` 这样,当点击列表项时,会触发 `activeIndex` 的变化,从而控制高亮效果的显示和隐藏,并且通过过渡动画实现了移动高亮效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值