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

news/2024/9/22 18:06:52/

前言:有趣的 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" /><metaname="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>


http://www.ppmy.cn/news/1467395.html

相关文章

Lua与Python:深度解析两者之间的核心差异

Lua与Python&#xff1a;深度解析两者之间的核心差异 在计算机编程的广袤领域中&#xff0c;Lua和Python作为两种具有独特特性和应用领域的语言&#xff0c;各自闪耀着独特的光芒。然而&#xff0c;尽管它们都是编程语言&#xff0c;但Lua和Python在多个方面存在着显著的差异。…

Ubuntu 修改镜像源为阿里云【详细步骤】

文章目录 修改步骤第 1 步:安装 vim 软件第 2 步:备份源第 3 步:修改为阿里云镜像附录 - 其它版本配置ubuntu 14.04 LTS (trusty) (EOL)ubuntu 16.04 LTS (xenial) (EOL)ubuntu 18.04 LTS (bionic)ubuntu 20.04 LTS (focal)ubuntu 22.04 LTS (jammy)ubuntu 23.04 (lunar)ubu…

HTML (总结黑马的)

<br>换行 <hr>水平线 div 独占一行 span 不换行 header 网页头部 nav 网页导航 footer 网页底部 aside 网页侧边栏 section 网页区块 article 网页文章 空格 < 小于号 > 大于号 图片&#xff1a; <img src"./cat.jpg" alt&q…

【面试】JDK和JVM是什么关系?

目录 1. JDK2. JVM3. 关系 1. JDK 1.Java Development Kit&#xff0c;java开发工具包。2.提供了java应用程序开发所需的所有工具和API。3.JDK包含了JRE&#xff08;Java Runtime Environment&#xff09;,即Java运行环境&#xff0c;以及编译Java源代码的编译器&#xff08;j…

排序(前篇)

1.排序的概念及其运用 2.插入排序的概念及实现 3.希尔排序的概念及实现 4.选择排序概念及实现 总代码&#xff08;对比各个排序在大量的数据情况排序所化的时间&#xff09;&#xff1a; 1.排序的概念及其运用 1.1排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使…

测试记录3:WLS2运行Linux界面

1.WLS1转到WLS2 &#xff08;1&#xff09;根据自己的平台&#xff0c;下载WLS2安装包 x64: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi arm64: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi &#xff08;2&…

Apache Calcite - 使用内置函数

前言 在上一篇文章中学习了如何适配来源数据&#xff0c;并使用sql查询数据。当我们获取数据后&#xff0c;通常还会进行各种计算、变换工作&#xff0c;这时使用内置函数可以极大提高我们的效率。 函数介绍 Apache Calcite 提供了广泛的 SQL 函数支持&#xff0c;包括但不限…

C++面试题其三

继续解答常见的C面试题 继续上篇博客的解答&#xff0c;我们将进一步探讨C中的一些关键概念和常见面试问题。 29. typedef和define的区别 typedef&#xff1a;用于为现有类型定义一个新的名字。typedef是编译时的操作&#xff0c;它提供了类型别名&#xff0c;可以提高代码可…