使用 React Slick 滑块在每张幻灯片中添加点

Posted

技术标签:

【中文标题】使用 React Slick 滑块在每张幻灯片中添加点【英文标题】:Add dots in each slide with React Slick slider 【发布时间】:2018-11-12 21:38:21 【问题描述】:

对于 React.js 中的滑块,我使用 React Slick。

使用此 API,我们可以使用 Previous and Next methods 在每张幻灯片中轻松添加上一个和下一个按钮。 但我想知道如何用点做同样的事情。

每张幻灯片的结构如下:

const slides = this.props.items.map(item => 
  return (
    <div className="carousel-item" key=item.id>
      <div className="carousel-img">
        <img className="img-fluid" src=item.src alt=item.altText />
      </div>
      <div className="carousel-caption">
        <div className="carousel-caption-content">
          <h3>item.caption.header</h3>
          <div className="carousel-caption-text">item.caption.text</div>
        </div>
        <div className="carousel-controls">
          <button className="button carousel-control carousel-control-prev" onClick=this.previous>Previous</button>
          <div className="carousel-indicators">
            /*      */
            /* Dots */
            /*      */
          </div>
          <button className="button carousel-control carousel-control-next" onClick=this.next>next</button>
        </div>
      </div>
    </div>
  )
)

容器结构如下:

return (
  <Container
    fluid
    id=this.props.id
    className=(this.props.className ? this.props.className + ' ' : '') + 'carousel-module'
    tag="article"
  >
    <Row>
      <div className="carousel slide">
        <Slider ref=c => (this.slider = c) ...settings>
          slides
        </Slider>
      </div>
    </Row>
  </Container>
);

而组件如下:

class CarouselModule extends Component 

previous = () => 
  this.slider.slickPrev();

next = () => 
  this.slider.slickNext();

render() 
  const settings = 
    dots: true,
    infinite: true,
    speed: 500,
    slidesToShow: 1,
    slidesToScroll: 1,
    initialSlide: 1,
    responsive: [
      
        breakpoint: 767,
        settings: 
          slidesToShow: 1,
        ,
      ,
    ],
  
  const slide = /* ... */
  return ( /* ... */ )

谢谢!

【问题讨论】:

为每个滑块添加点是什么意思? 在滑块的设置中我们通常可以这样设置:const settings = dots: true, infinite: true, speed: 500, slidesToShow: 1, slidesToScroll: 1 ; 在这种情况下,会出现很多点并控制你的滑块。但是我会将它们作为一个组件插入到每张幻灯片中,并且默认情况下不会将它们集中在滑块下方。看到了吗? 您可以通过将 css 应用于 slick-dots 来更改位置,并且可以像这样添加自定义点组件react-slick.neostack.com/docs/example/append-dots 是的,我看到了这个功能,但它似乎只是一个自定义的“点”或分页。我也可以改变“初始”圆点的位置。事实上,我会在每张幻灯片中添加圆点,带有容器和相对位置,以对幻灯片的其他元素产生影响。 【参考方案1】:

您可以将 react-magic-slider-dots 与 react-slick 一起使用。

如下创建设置:

const settings = 
  dots: true,
  arrows: true,
  infinite: false,
  slidesToShow: 1,
  slidesToScroll: 1,
  initialSlide: 1,
  speed: 500,
  appendDots: dots => 
    return <MagicSliderDots dots=dots numDotsToShow=4 dotWidth=30 />;
  

并将 props 传递给 Slider 组件:

return (
  <Slider ...settings>
    slides
  </Slider>
);

文档访问:https://www.npmjs.com/package/react-magic-slider-dots

【讨论】:

以上是关于使用 React Slick 滑块在每张幻灯片中添加点的主要内容,如果未能解决你的问题,请参考以下文章

使用 react-slick 更改当前幻灯片

React useState 更新不是重新渲染组件

React Slick 滑块,当前活动幻灯片与下一张幻灯片重叠

在反应中将标题设置为滑块的中心

React-slick 修改

Slick Slider - 从另一个页面创建链接