react+ts 实现简易轮播图

tsx代码:

import React, { useRef } from 'react';
import './top.css'
import { useEffect } from 'react';
import { useState } from 'react';
import { Button } from 'antd';
import { LeftOutlined,RightOutlined} from '@ant-design/icons';

function Top(props: any) {
    const { imgUrl, isAuto } = props;
    const images = [...imgUrl];
    images.unshift(imgUrl[imgUrl.length - 1]);
    images.push(imgUrl[0]);
    const imgRef = useRef<HTMLImageElement>(null);
    const [currentIndex, setCurrentIndex] = useState(1);
    const domLoop = useRef<HTMLUListElement>(null);//图片包裹的盒子 需要对其进行 transform
    let interval: NodeJS.Timeout; 
    useEffect(() => {
        if (isAuto) {
            // eslint-disable-next-line react-hooks/exhaustive-deps
            interval = setInterval(() => {
                setCurrentIndex((prevIndex) =>
                    prevIndex === images.length - 1 ? 1 : prevIndex + 1
                );
            }, 3000);
        }
        return () => clearInterval(interval);
    }, [currentIndex, isAuto, images.length]);
    //处理第一张和最后一张图片的跳转
    useEffect(() => {
        if (currentIndex === 0) {
            if(domLoop.current){
                domLoop.current.style.transition = 'none';//移除动画样式
                clearInterval(interval);//清除定时器
            }
            setCurrentIndex(images.length - 2);
        } else if (currentIndex === images.length - 1) {
            if(domLoop.current){
                domLoop.current.style.transition = 'none';//移除动画样式
                clearInterval(interval);//清除定时器
            }
            setCurrentIndex(1);
        }
    }, [currentIndex, images.length]);
    const handlePrev = () => {
        setCurrentIndex((prevIndex) =>
            prevIndex === 1 ? images.length - 2 : prevIndex - 1
        );
    };
    const handleNext = () => {
        setCurrentIndex((prevIndex) =>
            prevIndex === images.length - 2 ? 1 : prevIndex + 1
        );
    };
    return (
        <div className="carousel">
            <ul
            ref={domLoop}
                style={{
                    width: `${images.length * 100}%`,
                    transform: `translateX(-${currentIndex * (100 / images.length)}%)`,
                    transition: 'transform ease-out 0.45s',
                }}
            >
                {images.map((item: string, i: number) => (
                    <li key={i} style={{ width: `${100 / images.length}%` }}>
                        <img
                            ref={imgRef}
                            src={item}
                            alt=""
                            style={{ width: '100%', height: '100%' }}
                        />
                    </li>
                ))}
            </ul>
            <LeftOutlined className='leftButton' onClick={handlePrev}/>
            <RightOutlined  className='rightButton' onClick={handleNext}/>
        </div>
    );
}

export default Top;

css

/*轮播容器*/
.carousel{
    width: 400px;
    height: 200px;
    /* border: 1px solid red; */
    overflow: hidden;
    margin:0 auto;
    position: relative;
}
/*图片容器*/
.carousel ul{
    list-style: none;
    /* border: 1px solid black; */
    height: 100%;
    padding: 0;
    margin: 0;
    display: flex;
}
.carousel li{
    width: 100%;
    height: 100%;
    display: 'inline-block'
}
.carousel li img{
    width: 100%;
    height: 100%;
}
.left{
    width:100px;
    height:50px;
    border:1px solid green;
    position: absolute;
    left: 0;
    top: 75px;
}
.leftButton{
    position: absolute;
    top: 75px;
    left: 0;
}
.rightButton{
    position: absolute;
    top: 75px;
    right: 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React TS是一个用于构建用户界面的JavaScript库,而VR看房可以通过使用WebVR技术来实现。在React TS实现VR看房需要以下步骤: 1. 了解WebVR技术:WebVR是一种使Web应用程序能够在虚拟现实设备上运行的技术,它提供了一种在虚拟现实设备上渲染内容的方式。 2. 导入WebVR库:在React TS项目中,需要导入与WebVR相关的库,例如A-Frame或React 360等,这些库提供了一些用于构建VR界面的组件和功能。 3. 创建VR场景:使用React TS组件化开发方式,可以通过在项目中创建VR场景组件来构建VR看房的界面。可以使用库中提供的组件来构建3D场景、添加虚拟现实设备的交互等。 4. 加载房屋模型:在VR场景中加载房屋模型,可以使用库中提供的加载器将3D房屋模型导入到场景中,并设置适当的位置和缩放。 5. 添加交互功能:为了实现VR看房的功能,需要添加一些交互功能,例如移动、旋转和缩放房屋模型,点击房间以获取更多信息等。可以使用库中提供的交互组件或自定义事件处理程序来实现这些功能。 6. 兼容不同的设备:考虑到不同的虚拟现实设备,需要在React TS项目中进行一些适配工作,以确保VR看房界面在不同设备上的兼容性。 总的来说,使用React TS实现VR看房需要对WebVR技术有一定的了解,并结合具体的库和组件来构建VR场景、加载房屋模型,并添加交互功能。不同设备的兼容性也是一个需要考虑的因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值