3D图片动画效果组件封装

1.效果

3D图片动画效果

2.组件部分

javascript 复制代码
import "./index.less"


/**
 * 3D图片动画效果
 * @pictures: 图片数组[封面,英雄,标题]
 */
export const Picture3D = (props: any) => {
    console.log("3D图片动画效果", props)

    return <div
        className='picture3D'
        onClick={props.onClick}
        onMouseEnter={props.onMouseEnter}
        style={{
            width: props.width || "100%",
            height: props.height || "100%",
        }}
    >
        {/* 封面 */}
        <img src={props.pictures && (props.pictures[0] || "")} class="cover" />
        {/* 英雄 */}
        <img src={props.pictures && (props.pictures[1] || "")} class="hero" />
        {/* 标题 */}
        <img src={props.pictures && (props.pictures[2] || "")} class="title" />
    </div>
};

3. css样式部分

css 复制代码
// 3D图片动画效果
.picture3D {
    // width: 300px;
    // height: 500px;
    position: relative;

    & img {
        position: absolute;
        left: 0;
        width: 100%;
        /* 因为图片的效果是有过渡的,我们在这里也统一设置一下 */
        transition: 0.5s;
        height: 100%;
        width: 100%;
    }

    .cover {
        height: 100%;
        z-index: 1;
    }

    .hero {
        height: 100%;
        z-index: 2;
        /* 英雄在最初是不可见的 */
        opacity: 0;
    }

    .title {
        z-index: 3;
    }
}

.picture3D:hover .cover {
    /* 设置旋转 3D透视 */
    transform: perspective(500px) rotateX(25deg);
    /* 设置阴影 */
    box-shadow: 0 35px 35px -8px rgba(0, 0, 0, 0.75);
}

.picture3D:hover .hero {
    /* 透明度设置为不透明 */
    opacity: 1;
    /* 同样设置 3D 效果,然后横向不移动,纵向向上移动 50px,z 轴上靠近我们的眼睛一点设置 50px */
    transform: perspective(500px) translate3d(0, -50px, 50px);
}

.picture3D:hover .title {
    /* 设置 3D 效果,,然后横向不移动,纵向向上移动 25px,z 轴上靠近我们的眼睛一点设置 50px */
    transform: perspective(500px) translate3d(0, -25px, 50px);
}

4. 组件使用

javascript 复制代码
import { observer } from 'mobx-react';
import './index.less';
import { Picture3D } from '@/components/MyComponents/index'; // 引用组件






export default observer((props: any) => {




  return <div className={`report bg-white dark:bg-black text-black dark:text-white`}>
    {/* 组件使用传值 */}
    <Picture3D
      width={300}
      height={500}
      onClick={() => { console.log('点击了') }}
      pictures={[require('@/assets/3.webp'), require('@/assets/8.png'), require('@/assets/1.png')]}
    />
  </div>

}) 
相关推荐
张萌杰11 小时前
深度学习的基础知识(常见名词解释)
人工智能·深度学习·机器学习·1024程序员节
开开心心就好1 天前
免费无广告卸载工具,轻便安全适配全用户
linux·运维·服务器·网络·安全·启发式算法·1024程序员节
开开心心就好2 天前
图片格式转换工具,右键菜单一键转换简化
linux·运维·服务器·python·django·pdf·1024程序员节
徐子童4 天前
网络协议---TCP协议
网络·网络协议·tcp/ip·面试题·1024程序员节
扫地的小何尚6 天前
NVIDIA RTX PC开源AI工具升级:加速LLM和扩散模型的性能革命
人工智能·python·算法·开源·nvidia·1024程序员节
数据皮皮侠AI7 天前
上市公司股票名称相似度(1990-2025)
大数据·人工智能·笔记·区块链·能源·1024程序员节
开开心心就好7 天前
系统清理工具清理缓存日志,启动卸载管理
linux·运维·服务器·神经网络·cnn·pdf·1024程序员节
Evan东少10 天前
[踩坑]笔记本Ubuntu20.04+NvidiaRTX5060驱动+cuda+Pytorch+ROS/Python实现人脸追踪(环境准备)
1024程序员节
不爱编程的小陈11 天前
C/C++每日面试题
面试·职场和发展·1024程序员节
开开心心就好11 天前
右键菜单管理工具,添加程序自定义名称位置
linux·运维·服务器·ci/cd·docker·pdf·1024程序员节