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

鼠标放在图片上,图片3D倾斜

image

 

<!DOCTYPE html>
<html>
    <head>
        <style>
            .wrapper {
                display: flex;
                justify-content: center;
                align-items: center;
                width: 100%;
                height: 100vh;
                background: linear-gradient(135deg, #0a0a0a 0%, #1a1a2e 100%);
                perspective: 1000px;
            }

            .cardImg {
                width: 400px;
                height: 250px; /* 固定高度确保效果一致 */
                object-fit: cover; /* 保持图片比例 */
                border-radius: 16px;
               
                /* 3D变换 */
                transform:
                    rotateX(var(--rotateX, 0deg))
                    rotateY(var(--rotateY, 0deg))
                    translateZ(50px);
               
                /* 过渡 */
                transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
               
                /* 3D设置 */
                transform-style: preserve-3d;
               
                /* 多重阴影和光效 */
                box-shadow:
                    0 0 0 1px rgba(255, 255, 255, 0.1),
                    0 15px 35px rgba(0, 0, 0, 0.5),
                    0 5px 15px rgba(0, 0, 0, 0.3);
               
                /* 反射光效果 */
                position: relative;
                overflow: hidden;
            }

            .cardImg::before {
                content: '';
                position: absolute;
                top: 0;
                left: 0;
                right: 0;
                bottom: 0;
                background: linear-gradient(
                    135deg,
                    transparent 0%,
                    rgba(255, 255, 255, 0.1) 50%,
                    transparent 100%
                );
                opacity: 0;
                transition: opacity 0.3s;
                pointer-events: none;
                z-index: 2;
            }

            .cardImg:hover::before {
                opacity: 0.6;
            }

            .cardImg:hover {
                box-shadow:
                    0 0 0 1px rgba(255, 255, 255, 0.2),
                    0 25px 50px rgba(0, 0, 0, 0.7),
                    0 10px 20px rgba(0, 0, 0, 0.4);
                transform:
                    rotateX(var(--rotateX, 0deg))
                    rotateY(var(--rotateY, 0deg))
                    translateZ(80px)
                    scale(1.05);
            }
        </style>
    </head>
    <body>
        <div class="wrapper">
            <img class="cardImg" src="./1.jpg" alt="3D card">
        </div>
       
        <script>
            const cardImg = document.querySelector('.cardImg');
           
            // 旋转角度范围
            const rotateRange = 20; // 最大旋转角度
           
            cardImg.addEventListener('mousemove', (e) => {
                const { offsetX, offsetY } = e;
                const { offsetWidth, offsetHeight } = cardImg;
               
                // 计算旋转角度
                // offsetX / offsetWidth 范围是 0-1,减去0.5得到 -0.5 到 0.5
                const rotateY = -((offsetX / offsetWidth) - 0.5) * rotateRange * 2; // -20 到 20
                const rotateX = -(0.5 - (offsetY / offsetHeight)) * rotateRange * 2; // -20 到 20
               
                // 设置CSS变量
                cardImg.style.setProperty('--rotateX', `${rotateX}deg`);
                cardImg.style.setProperty('--rotateY', `${rotateY}deg`);
            });
           
            cardImg.addEventListener('mouseleave', () => {
                // 平滑回到初始状态
                cardImg.style.setProperty('--rotateX', '0deg');
                cardImg.style.setProperty('--rotateY', '0deg');
            });
        </script>
    </body>
</html>
http://www.jsqmd.com/news/318785/

相关文章:

  • GUI by Python 6 一段 gui 代码分析
  • 0x3f 第46天 面向实习的八股背诵第三天 + 堆一题 很焦虑,感觉压根背不完,背了也不一定能讲出来,一直在想象面试的场景
  • 搜维尔科技:隆重推出MANUS Metagloves Pro Haptic触觉手套-精准的手部追踪与实时触觉反馈的完美结合
  • 微软发布第二代AI推理芯片Maia 200
  • 【课程设计/毕业设计】基于Spring Boot的学生信息管理系统基于springboot的高校院系学生信息管理系统【附源码、数据库、万字文档】
  • 美国启动重大重构计划,用AI将易攻击代码转换为Rust语言
  • C语言学习14——有符号数和无符号数、register、auto、static、extern关键字
  • 计算机Java毕设实战-基于SpringBoot+Vue的高校学生档案管理系统基于springboot的高校院系学生信息管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 基于java的在线教育系统毕业论文+PPT(附源代码+演示视频)
  • Java毕设项目:基于springboot的高校院系学生信息管理系统(源码+文档,讲解、调试运行,定制等)
  • 从0到1打造Skill:完整实战指南
  • 掌握这73个Windows 11键盘快捷键成为高手
  • 2025年中国十大护理床厂家哪家专业推荐:护理床提供商
  • Java毕设项目:基于springboo的小区车辆管理系统(源码+文档,讲解、调试运行,定制等)
  • AI智能体系统扩展规律研究:何时何原因有效
  • Qwen2.5大模型技术详解:架构设计、微调策略与知识增强指南,建议收藏
  • 【计算机毕业设计案例】基于springboot的高校院系学生信息管理系统基于java+springboot+vue+mysql的高校院系学生信息管理系统 (程序+文档+讲解+定制)
  • cURL因AI垃圾报告过载终止漏洞悬赏计划
  • Precog发布企业数据AI化新功能,自动添加业务上下文
  • 序员必看!大模型高薪岗位揭秘:收藏这篇文章,年薪百万不是梦
  • Web毕业设计常见报错汇总(无代码版):避开这些坑,开发效率翻倍
  • 从 CPU cache 的角度看,递归和非递归建立在性能上有哪些差异?
  • 【毕业设计】基于springboot的高校院系学生信息管理系统(源码+文档+远程调试,全bao定制等)
  • IIR滤波器核心原理深化:从差分方程到工业级实现
  • 2026聊城合金钢管现货厂家优选评测
  • 【计算机毕业设计案例】基于Javaweb的小区车辆管理系统基于springboo的小区车辆管理系统(程序+文档+讲解+定制)
  • Java毕设项目推荐-基于Java的高校学生信息管理系统学生信息、教师信息、课程分类、课程信息、学生选课、学生签到、学生成绩【附源码+文档,调试定制服务】
  • 基于SpringBoot的汽车维保服务平台设计与实现任务书
  • Java毕设选题推荐:基于springboot的高校院系学生信息管理系统基于Spring Boot的学生信息管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 【毕业设计】基于springboo的小区车辆管理系统(源码+文档+远程调试,全bao定制等)