react 轮播组件封装

轮播组件

1 dom加载后自动轮播

2 图片循环轮播

2 手动轮播时停止自动轮播,手动轮播结束2s后启动自动轮播

import React from 'react';
import ReactDOM from 'react-dom';
import './App.css';


class Ha extends React.Component {
    constructor(props) {
        super(props);
        // 设置 initial state
        this.state = {
            moves:0,
            imgs:['./1.jpg','./2.jpg','./3.jpg','./4.jpg','./5.jpg'],
            constLeft:200,
            timer:null,//定时器轮播
            timer2:null,//延迟器 延迟两秒启动定时器
        
        };
        
      this.option = this.option.bind(this);
    }
    componentDidMount() {
        const Timer1 = setInterval(()=>{
            this.option(1)
        }, 1000);
        this.setState({timer:Timer1});
      }
    timeOut = ()=>{//手动点击后启动延迟器
   //这样写,就不用再手动绑定this了
        const Timer2 = setTimeout(()=>{//手动点击后延迟两秒启动定时去
            const Timer3 = setInterval(()=>{//定时器定时轮播
                this.option(1);
            },1000);
            this.setState({timer:Timer3});
        },2000)
        this.setState({timer2:Timer2});
    }
    option(flag,option1){
        const {timer,moves,constLeft,timer2}=this.state;
        option1&&clearInterval(timer)//手动点击时清除定时器
        timer2&&clearTimeout(timer2);//手动点击时当延迟器存在时清除
        if(flag>0){//右边
            if(moves<=0 &&moves>-800){
                this.setState({moves:moves-constLeft})    
            }else{
                this.setState({moves:0})
            }
          }else{//左边
            if(moves<0){
                this.setState({moves:moves+constLeft})
            }else{
                this.setState({moves:-800});
            }
            
          }
          option1&&this.timeOut();//手动点击后启动延迟器
    }
    showList() {
       return (
           <div className='box-box'>
                <span className='icon1 ' onClick={()=>this.option(-1,1)}>left</span> 
               
            <div className='box'>
                <ul className='list' style={{left:this.state.moves+'px'}}>
                    {   
                        this.state.imgs.map((item, index) => {
                            return (
                            <li key={index} >
                                <img src={item}/>
                            </li>
                            )
                            
                        })
                    }
                </ul>
                 </div>
                 <span className='icon1 icon2' onClick={()=>this.option(1,1)}>right</span> 
       
        </div>
        )
      } 
    render() {
        return (
            <div>
                {this.showList()}
            </div>
        );
    }
}
export default Ha;
原文地址:https://www.cnblogs.com/fanjiawen/p/14519291.html