如何在React Slick的滑块点中添加slick-active类

时间:2019-03-04 14:25:34

标签: javascript css reactjs slick.js react-slick

我使用了React-Slick,并使用Slider组件制作了旋转木马。代码在下面,

const carousel = (props) => {
    return (
        <div style={{ height: '50%', marginTop: '20px' }}>
            <Slider {...settings}>
                <div className={text__bar}>
                    <div >
                        <font>Lorum Ipsum 1</font>
                    </div>
                    <div className={slide1} />
                </div>
                <div className={text__bar}>
                    <div>
                        <font>Lorum Ipsum 2</font>
                    </div>
                    <div className={slide1} />
                </div>
                <div className={text__bar}>
                    <div>
                        <font>Lorum Ipsum 3</font>
                    </div>
                    <div className={slide1} />
                </div>
            </Slider>
            <div className={purple__bar}></div>
        </div>
    );
};

设置对象

const settings = {
    dots: true,
    infinite: true,
    speed: 500,
    slidesToShow: 1,
    slidesToScroll: 1,
    autoplay: true,
    autoplaySpeed: 5000,
    className: SlickMain,
    dotsClass: button__bar,
    arrows: false,
};

我添加了一些额外的CSS来设置轮播点(按钮)的样式,使其看起来像波纹管,

dotbar

由开发人员工具检查后,与当前显示的幻灯片相关的按钮将注入一个名为“ slick-active”的CSS类

injected-class

我需要做的是将与幻灯片相对应的按钮的背景颜色更改为黑色,使当前颜色变为紫色。

我所做的是

.button__bar li.slick-active button {
    opacity: .75;
    color: #000
}

但是它不起作用。我想念什么?

.button__bar 是我为设置对象中的点赋予的点类。

3 个答案:

答案 0 :(得分:1)

我已经使用:global()

使CSS模块完成了这项工作。

在您的特定情况下,添加li.slick-active-> :global(li.slick-active)

.button__bar :global(li.slick-active) button {
  opacity: .75;
  color: #000
}

这是您的codebox分叉的人

答案 1 :(得分:1)

如果有人使用材料 ui,这里是它的工作原理

const settings: Settings = {
  dots: true,
  infinite: true,
  speed: 500,
  slidesToShow: 1,
  slidesToScroll: 1,
  dotsClass: `slick-dots ${classes.dots}`,
};
// your classes created with material ui
makeStyles((theme: Theme) => ({
// may not be the best way but it works
  dots: {
    bottom: 0,
    "& li.slick-active button::before": {
      color: theme.palette.primary.main,
    },
    "& li": {
      "& button::before": {
      fontSize: theme.typography.pxToRem(14),
      color: "#fff",
      opacity: 0.5,
    },
  }
}))

这是一个代码和框链接 https://codesandbox.io/s/bold-snow-h9rwq?file=/src/App.tsx

请注意,我没有通过导入光滑的 css 来检查它,即

// Import css files
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";

而是使用了cdn

答案 2 :(得分:0)

发生这种情况是因为我正在使用CSS模块加载我的CSS文件。在下面的代码示例中,您可以清楚地看到正在发生的事情。

https://codesandbox.io/s/1z2lnox5rq?fontsize=14

因此,作为解决方案,我向设置对象添加了波纹管方法。

const settings = {
  dots: true,
  infinite: true,
  speed: 1000,
  slidesToShow: 1,
  slidesToScroll: 1,
  autoplay: true,
  autoplaySpeed: 3000,
  className: slickMain,
  dotsClass: button__bar,
  arrows: false,
  beforeChange: (prev, next) => {
    this.setState({ currentSlide: next });
  },
  // afterChange: (index) => this.setState({ currentSlide: index }),
  appendDots: dots => {
    return (
      <div>
        <ul>
          {dots.map((item, index) => {
            return (
              <li key={index}>{item.props.children}</li>
            );
          })}
        </ul>
      </div>
    )
  },
  customPaging: index => {
    return (
      <button style={index === this.state.currentSlide ? testSettings : null}>
        {index + 1}
      </button>
    )
  }
};

为解决我的问题,我使用beforeChange获取下一张幻灯片索引并将其保存在状态中。然后将appendDotsdivul一起使用,将li注入到点栏区域。在li内,使用button方法将customPaging作为子道具传递。当当前幻灯片等于处于状态的customPaging的索引时,则为类注入背景色。

const testSettings = {
    backgroundColor: 'rgba(255, 255, 255, 0.8)',
    outline: '0'
}