react轮播图 - Go语言中文社区

react轮播图


自己写了一个react轮播图,最近在学习react希望大神们能指出错误或不好的地方。

效果:

代码:

import React, {Component} from 'react';
import  './ReactCarousel.css';
class ReactCarousel extends Component{
    constructor(){
        super();
        this.state = {
            imgs:[
                './images/1.png',
                './images/2.png',
                './images/3.png',
                './images/4.png',
                './images/5.png'
               ],   // 图片数组
          showIndex: 0, //显示第几个图片
          timer: null,  // 定时器
          show: false   // 前后按钮显示
        }
    }
    render(){
        return (
            <div className="ReactCarousel">
                <div className="contain" 
                     onMouseEnter={()=>{this.stop()}} //鼠标进入停止自动播放
                     onMouseLeave={()=>{this.start()}}  //鼠标退出自动播放
                >
                    <ul className="ul">
                        {
                            this.state.imgs.map((value, index) => {
                                return (
                                    <li className={index === this.state.showIndex ? 'show' : ''}
                                        key={index} 
                                    > 
                                        <img src={require(value + '')} alt="轮播图" />
                                    </li>
                                )
                            })
                        }
                    </ul>
                    <ul className="dots" style={{width: this.state.imgs.length * 20 + 'px'}}> 
                        {
                            this.state.imgs.map((value, index) => {
                                return (
                                    <li key={index}  
                                        className={index === this.state.showIndex ? 'active' : ''} 
                                        onClick={()=>{this.change(index)}}>
                                    </li>)
                            })
                        }
                        
                    </ul>
                    <div className="control">
                        <span className="left"  onClick={(e)=>{this.previous(e)}}>左</span>
                        <span className="right" onClick={(e)=>{this.next(e)}}>右</span>
                    </div>
                </div>
            </div>
        )
    }
    componentDidMount(){ //一开始自动播放
        this.start();
    }
    componentWillUnmount() { //销毁前清除定时器
        this.stop();
    }
    stop = () => { //暂停
        let {timer} = this.state;
        clearInterval(timer);
    }
    start = () => { //开始
        let {timer} = this.state;
        timer = setInterval(() => {
            this.next();
        }, 2000);
        this.setState({
            timer
        })
    }
    change = (index) => { //点击下面的按钮切换当前显示的图片
        let {showIndex} = this.state;
        showIndex = index;
        this.setState({
            showIndex
        })
    }
    previous = (e) => { //上一张
        let ev = e || window.event;
        let {showIndex, imgs} = this.state;
        if(showIndex <= 0){
            showIndex = imgs.length - 1;
        }else{
            showIndex --;
        }
        this.setState({
            showIndex
        })
    }
    next = (e) => { //下一张
        let ev = e || window.event;
        let {showIndex, imgs} = this.state;
        if(showIndex >= imgs.length - 1){
            showIndex = 0;
        }else{
            showIndex ++;
        }
        this.setState({
            showIndex
        })
    }
}
export default ReactCarousel;

css

.contain {
    position: relative;
    top: 50%;
    left: 50%;
    width: 480px;
    height: 302px;
    transition: all .8s;
    transform: translateX(-50%);
    color: #fff;
    overflow: hidden;
    cursor: pointer;
}
.contain .ul {
     height: 100%;
     list-style: none;
}
.contain .ul .items {
       position: absolute;
       top: 0px;
       width: 100%;
       height: 100%;
}
.ul li.show{
    display: block;
}
.ul li {
    display: none;
}
.ul li img {
    width: 100%;
    height: 100%;
}
.contain .dots {
     position: absolute;
     left: 50%;
     bottom: 30px;
     height: 10px;
     transform: translateX(-50%);
}
.dots li {
    float: left;
    width: 10px;
    height: 10px;
    margin: 0px 5px;
    border-radius: 50%;
    transition: all .3s;
    background-color: antiquewhite;
    list-style: none;
}
.dots li.active {
   background-color: blue;
}
.control .left {
    position: absolute;
    top: 50%;
    left: 10px;
    padding: 5px;
    transform: translateY(-50%);
    font-size: 20px;
    cursor: pointer;
}
.control .left:hover {
    background-color: rgba($color: #000000, $alpha: 0.3);
}
.control .right {
    position: absolute;
    top: 50%;
    right: 10px;
    padding: 5px;
    transform: translateY(-50%);
    font-size: 20px;
    cursor: pointer;
}
.control .right:hover {
    background-color: rgba(0, 0, 0, .3);
}
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_34344403/article/details/88674087
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-16 06:09:44
  • 阅读 ( 674 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢