当前位置: 首页 > article >正文

鼠标移入高亮边框效果

效果展示

鼠标移入边框效果

一、布局

// 布局
<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>

http://www.kler.cn/news/368127.html

相关文章:

  • 汇编语言
  • leetcode hot100(1)
  • 【论文阅读】Learning persistent homology of3D point clouds
  • Vue3 学习笔记(七)Vue3 语法-计算属性 computed详解
  • Java Web项目实战:从零基础到项目开发全流程
  • WPF+Mvvm案例实战(五)- 自定义雷达图实现
  • 在Spring Boot框架下的Java异常处理
  • 【入门级教程】MySQL:从零开始的数据库之旅
  • 2024 Rust现代实用教程:变量与常见数据类型
  • PG数据库之索引详解
  • leetcode438. 找到字符串中所有字母异位词
  • 【面试经典150】day 6
  • Kubernetes实战——DevOps集成SpringBoot项目
  • RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器
  • Crawler4j在多线程网页抓取中的应用
  • C++的相关习题(2)
  • 算法-二叉树的最大路径和
  • 架构师备考-数据库设计、实施和维护
  • 基于协同过滤算法的旅游网站推荐系统
  • 【ECMAScript标准】深入解读ES6新特性及其应用
  • 总分441数一149专137东南大学820信号数电考研经验电子信息与通信工程电路原920专业基础综合,真题,大纲,参考书。
  • 【JavaEE】【多线程】阻塞队列
  • 零基础Java第十一期:类和对象(二)
  • 学习前端HTML
  • 如何保护服务器的系统日志
  • CCRC-DSA数据安全评估师: 2024中国5G+工业互联网大会将于武汉举办