鼠标移入高亮边框效果

效果展示

鼠标移入边框效果

一、布局

// 布局
<template>
    <div class="container">
        <div class="card">
            <div class="inner">君不见,黄河之水天上来,奔流到海不复回。</div>
        </div>
        <div class="card">
            <div class="inner">君不见,高堂明镜悲白发,朝如青丝暮成雪。</div>
        </div>
        <div class="card">
            <div class="inner">人生得意须尽欢,莫使金樽空对月。</div>
        </div>
        <div class="card">
            <div class="inner">天生我材必有用,千金散尽还复来。</div>
        </div>
        <div class="card">
            <div class="inner">烹羊宰牛且为乐,会须一饮三百杯。</div>
        </div>
        <div class="card">
            <div class="inner">岑夫子,丹丘生,将进酒,杯莫停。</div>
        </div>
    </div>
</template>

二、样式

// 样式

<style scoped>
/* 网格布局 */
.container {
    padding: 20px;
    box-sizing: border-box;
    width: 100%;
    height: 100%;
    text-align: center;
    display: grid;
    grid-template-columns: auto auto auto;
    grid-row-gap: 20px;
    grid-column-gap: 20px;
    justify-content: center;
}
/* 每个card卡片相对定位 */
.card {
    aspect-ratio: 4/3;
    border-radius: 8px;
    background: rgba(255, 255, 255, 0.1);
    color: #fff;
    position: relative;
    overflow: hidden;
}
/* 里面的文字绝对定位 */
.inner {
    position: absolute;
    inset: 2px;
    background: #222;
    border-radius: inherit;
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 3;
}
/* 这个是card的边框 */
.card::before {
    content: '';
    position: absolute;
    top: var(--y, -1000px);
    left: var(--x, -1000px);
    width: 100%;
    height: 100%;
    z-index: 2;
    border-radius: inherit;
    background: radial-gradient(
        closest-side circle,
        rgba(255, 255, 255, 0.6) 0%,
        transparent
    );
    transform: translate(-50%, -50%);
}
</style>

三、交互

// 交互
<script setup>
import { onMounted } from 'vue'
onMounted(() => {
    const container = document.querySelector('.container')
    const cards = document.querySelectorAll('.card')
    container.onmousemove = function (e) {
        for (const card of cards) {
        // 获取鼠标坐标点
            const rect = card.getBoundingClientRect()
            const x = e.clientX - rect.left
            const y = e.clientY - rect.top
            card.style.setProperty('--x', `${x}px`)
            card.style.setProperty('--y', `${y}px`)
        }
    }
})
</script>
### 关于 AntV X6 鼠标移入节点高亮边框的实现 在 AntV X6 中,可以通过监听 `node:mouseenter` 和 `node:mouseleave` 事件来动态修改节点样式以实现鼠标移入高亮边框效果。以下是具体的实现方法: 当鼠标进入节点区域时,可以调用 `cell.attr()` 方法更改该节点的样式属性;而当鼠标离开节点时,则恢复原始状态。 #### 示例代码 ```javascript graph.on('node:mouseenter', ({ node }) => { // 修改节点的边框颜色和宽度作为高亮效果 node.attr({ body: { stroke: '#ff0000', // 设置边框颜色为红色 strokeWidth: 2 // 增加边框宽度 } }); }); graph.on('node:mouseleave', ({ node }) => { // 恢复默认样式 node.attr({ body: { stroke: '#000000', // 默认边框颜色 strokeWidth: 1 // 默认边框宽度 } }); }); ``` 上述代码片段展示了如何通过监听事件并调整节点样式的具体操作[^4]。其中,`stroke` 属性控制边框的颜色,`strokeWidth` 控制边框的粗细程度。 --- ### 完整集成方案中的注意事项 为了确保此功能与其他交互逻辑兼容,在实际项目中还需要注意以下几点: - **性能优化**:如果图中有大量节点,频繁触发 `mouseenter` 和 `mouseleave` 可能会影响性能。因此可以在必要情况下限制更新频率或者批量处理。 - **样式管理**:推荐将所有可能使用的样式集中定义在一个对象里以便统一管理和维护。 例如,创建一个全局变量存储默认样式与高亮样式: ```javascript const defaultStyles = { body: { stroke: '#000', strokeWidth: 1, }, }; const highlightStyles = { body: { stroke: '#f00', strokeWidth: 2, }, }; ``` 随后可以直接引用这些预设值来进行切换,从而减少硬编码带来的复杂度[^5]。 --- ### 结合其他功能扩展可能性 除了简单的边框变化外,还可以进一步增强视觉反馈效果,比如改变背景色、显示额外信息标签等。这取决于应用的具体需求场景以及设计风格的一致性考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岩岩很哇塞!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值