简体   繁体   English

请帮我在 react.js 中创建一个图像 slider?

[英]Please help me create an image slider in react.js?

var workArrays = [{id: 1, img: "https://scontent-lax3-2.xx.fbcdn.net/v/t1.0-9/117405206_1535037326696077_4967665142447981078_o.png?_nc_cat=111&ccb=2&_nc_sid=730e14&_nc_ohc=XlNXGJF47E0AX8lB1fk&_nc_ht=scontent-lax3-2.xx&oh=d44bd3d97c906f56746b360fc7514c64&oe=5FF77A89"}, 
    {id: 2, img: "https://scontent-lax3-2.xx.fbcdn.net/v/t1.0-9/117405206_1535037326696077_4967665142447981078_o.png?_nc_cat=111&ccb=2&_nc_sid=730e14&_nc_ohc=XlNXGJF47E0AX8lB1fk&_nc_ht=scontent-lax3-2.xx&oh=d44bd3d97c906f56746b360fc7514c64&oe=5FF77A89"},
    {id: 3, img: "https://scontent-lax3-2.xx.fbcdn.net/v/t1.0-9/117405206_1535037326696077_4967665142447981078_o.png?_nc_cat=111&ccb=2&_nc_sid=730e14&_nc_ohc=XlNXGJF47E0AX8lB1fk&_nc_ht=scontent-lax3-2.xx&oh=d44bd3d97c906f56746b360fc7514c64&oe=5FF77A89"}, 
    {id: 4, img: "https://scontent-lax3-2.xx.fbcdn.net/v/t1.0-9/117405206_1535037326696077_4967665142447981078_o.png?_nc_cat=111&ccb=2&_nc_sid=730e14&_nc_ohc=XlNXGJF47E0AX8lB1fk&_nc_ht=scontent-lax3-2.xx&oh=d44bd3d97c906f56746b360fc7514c64&oe=5FF77A89"},
    {id: 5, img: "https://scontent-lax3-2.xx.fbcdn.net/v/t1.0-9/117405206_1535037326696077_4967665142447981078_o.png?_nc_cat=111&ccb=2&_nc_sid=730e14&_nc_ohc=XlNXGJF47E0AX8lB1fk&_nc_ht=scontent-lax3-2.xx&oh=d44bd3d97c906f56746b360fc7514c64&oe=5FF77A89"}]

     var slides = workArrays.length;
    class Page1 extends React.Component{
        constructor(props){
            super(props);
            this.state = {
             // SOS: this is the initial state that I have set up.
               slides : (0) 
            };
            this.leftArrow = this.leftArrow.bind(this);
            this.rightArrow = this.rightArrow.bind(this);
        }
            leftArrow(){
                this.setState({
                    // SOS: they are not doing anything when clicked
                    slides: this.state.slides - 1 
                })
            }
            rightArrow(){
                this.setState({
                    // SOS: this want also not doing anything
                    slides: this.state.slides + 1 T
               })

            }
        render(){
        return(
                <div>
                    <Header/>
                    <Hero/>
                    <div>
                        // SOS: Also my left arrown and right arrow are not showing up
                        <button onClick={this.leftArrow}><i className="far fa-arrow-circle-left"></i></button>
                        <button onClick={this.rightArrow}><i className="far fa-arrow-circle-right"></i></button>
                        {this.props.workArrays.map(function(work){
                            return <div key={work.id}>
                                <Services img={work.img}/>
                    </div>
            })}</div>
               </div>
        );
        }
    }

You do not have the right variable bindings: Before the class constructor you define variable您没有正确的变量绑定:在 class 构造函数之前定义变量

 var slides = workArrays.length;

There is a bug in the functions leftSlide and rightSlide (you use state, where you have a zero)函数 leftSlide 和 rightSlide 有一个错误(你使用 state,你有一个零)

this.setState({
 slides: this.state.slides - 1 
});

That's the reason why in this.state.slides you have -1 on click left.这就是为什么在 this.state.slides 中单击左侧有 -1 的原因。

Try to use on left click:尝试使用左键单击:

// calculate previous slide
var newCurrentSlide = this.state.slides - 1;
// if slide number < 0, then get last slide from array
if (newCurrentSlide < 0){
  newCurrentSlide = slides.length - 1;
}

this.setState({
 slides: newCurrentSlide
});

for right click:右键单击:

// calculate next slide
var newCurrentSlide = this.state.slides + 1;
// if slide number >= count slides, then get first slide from array
if (newCurrentSlide >= slides){
  newCurrentSlide = 0;
}

this.setState({
 slides: newCurrentSlide
});

I suggest you rename variable slides to slidesCount - it is a better naming convention.我建议您将变量 slides 重命名为 slidesCount - 这是一个更好的命名约定。

And if you want a dynamic slider on left and right clicks then you can show a single active image like this:如果你想要一个动态的 slider 左右点击,那么你可以显示一个像这样的活动图像:

render(){
  return(
    <div>
      <Header/>
      <Hero/>
      <div>
        <button onClick={this.leftArrow}><i className="far fa-arrow-circle-left"></i></button>
        <button onClick={this.rightArrow}><i className="far fa-arrow-circle-right"></i></button>
        <div key={this.props.workArrays[this.state.slides].id}>
          <Services img={this.props.workArrays[this.state.slides].img}/>
        </div>
      </div>
    </div>
  );
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM