【css3d动画】react+ts实现3d旋转环绕banner效果

静态效果图

在这里插入图片描述

功能

  • 拖动后会默认居中当前最靠近中间元素
  • 点击靠近中间位置的左右两个元素可以切换剧中元素
  • 可选择hover时添加视频动画

代码

import React, {
    useState, MouseEvent, useMemo, useEffect } from 'react';
import {
    useEventListener, useThrottleFn } from 'ahooks';
import cx from './index.module.less';
// 采用了classNames的样式写法

interface Props {
   
  imgWidth: number;
  imgHeight: number;
}
interface ListItem {
   
  img: string;
  video: string;
  index: number;
}

const imgList = [
  {
   
    img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRc-daxzQsmo3cQ7M0TM4hOz3pX-1WKzB-V-w&usqp=CAU',
    video: '',
  },
  {
   
    img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQXhun_JTTMmKDhvGv0vELHx41BS5hVL58mDA&usqp=CAU',
    video: '',
  },
  {
   
    img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR1kno3P3RqG6qB-uJYBlglsznLVf4XLY_34A&usqp=CAU',
    video: '',
  },
  {
   
    img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTz-VVabwdSkWiTFe4WTzj1WkD3ILkrEV0dQw&usqp=CAU',
    video: '',
  },
  {
   
    img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRc-daxzQsmo3cQ7M0TM4hOz3pX-1WKzB-V-w&usqp=CAU',
    video: '',
  },
  {
   
    img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQXhun_JTTMmKDhvGv0vELHx41BS5hVL58mDA&usqp=CAU',
    video: '',
  },
  {
   
    img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR1kno3P3RqG6qB-uJYBlglsznLVf4XLY_34A&usqp=CAU',
    video: '',
  },
  {
   
    img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTz-VVabwdSkWiTFe4WTzj1WkD3ILkrEV0dQw&usqp=CAU',
    video: '',
  },
  {
   
    img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRc-daxzQsmo3cQ7M0TM4hOz3pX-1WKzB-V-w&usqp=CAU',
    video: '',
  },
  {
   
    img: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQXhun_JTTMmKDhvGv0vELHx41BS5hVL58mDA&usqp=CAU',
    video: '',
  },
];

export const Banner3D = ({
    imgWidth = 400, imgHeight = 400 }: Props) => {
   
  const [clientWidth, setClientWidth] = useState(document.documentElement.clientWidth);
  // 鼠标是否处于拖动状态
  const [mouseDrag, setMouseDrag] = useState(false);
  // 鼠标拖动距离
  const [mouseX, setMouseX] = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.温m_

如果喜欢可以支持打赏小哥!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值