前端 CSS 经典:3D Hover Effect 效果

前言:有趣的 3D Hover Effect 效果,通过 js 监听鼠标移动,动态赋值 rotateX,rotateY 的旋转度来实现。

效果图:

代码实现:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>document</title>
    <style>
      body {
        background: #000;
      }
      .card {
        margin: 200px auto;
        width: 400px;
        border-radius: 10px;
        transform: perspective(500px) rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg));
        transition: 0.3s;
      }
      .card img {
        width: 100%;
        border-radius: inherit;
      }
      .card:hover {
        box-shadow: -3px -3px 10px #54a29e, 3px 3px 10px #a79d66;
      }
    </style>
  </head>
  <body>
    <div class="card">
      <img src="img.jpg" />
    </div>
    <script>
      const card = document.querySelector(".card");
      const yRange = [-10, 10];
      const xRange = [-10, 10];
      function getRotateDeg(range, value, length) {
        return (value / length) * (range[1] - range[0]) + range[0];
      }
      card.onmousemove = (e) => {
        const { offsetX, offsetY } = e;
        const { offsetWidth, offsetHeight } = card;
        const ry = -getRotateDeg(yRange, offsetX, offsetHeight);
        const rx = getRotateDeg(xRange, offsetY, offsetWidth);

        card.style.setProperty("--rx", `${rx}deg`);
        card.style.setProperty("--ry", `${ry}deg`);
        console.log(rx, ry);
      };
      card.onmouseleave = () => {
        card.style.setProperty("--rx", 0);
        card.style.setProperty("--ry", 0);
      };
    </script>
  </body>
</html>

相关推荐

  1. 前端 CSS 经典CSS 原子化

    2024-06-05 19:44:12       8 阅读
  2. 前端常用js、css效果

    2024-06-05 19:44:12       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-05 19:44:12       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-05 19:44:12       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-05 19:44:12       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-05 19:44:12       20 阅读

热门阅读

  1. 如何评价GPT-4o?

    2024-06-05 19:44:12       8 阅读
  2. Python for的用法:深入解析与实战应用

    2024-06-05 19:44:12       10 阅读
  3. Sass的简单总结

    2024-06-05 19:44:12       9 阅读
  4. Rust Learning Day1

    2024-06-05 19:44:12       8 阅读
  5. 简单的学生信息管理系统

    2024-06-05 19:44:12       9 阅读
  6. 比较Rust和Haskel

    2024-06-05 19:44:12       11 阅读
  7. iOS ------ 多线程 pthread,NSThread

    2024-06-05 19:44:12       9 阅读
  8. 静态页面引入axios,并创建实例使用

    2024-06-05 19:44:12       8 阅读