首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React-slick:在滑动时添加动画

React-slick:在滑动时添加动画
EN

Stack Overflow用户
提问于 2020-08-12 23:16:35
回答 2查看 2.6K关注 0票数 1

我已经使用react slick创建了一个滑块,现在需要在上一次和下一次单击按钮时更改幻灯片的过渡和动画。得到了一些帮助,添加类到当前活动的幻灯片,同时更改幻灯片,并添加动画和过渡效果。并在幻灯片完全改变后移除。我试过了,但它不能像预期的那样工作。首先,它不是在下一个或上一个按钮按钮上添加类,第二,它是在滑动幻灯片上添加类,但它干扰了其他旋转木马项目,这是我的代码

代码语言:javascript
复制
  const settings = {
    slidesToShow: 1,
    slidesToScroll: 1,
    arrows: false,
    autoplay: false,
    autoplaySpeed: 2000,
    infinite: false,
    beforeChange,
    afterChange,
    useCSS: false,
    useTransform : false
  }

  const beforeChange = (prev: number, next: number) => {
    let element = document.querySelector('.slick-active');
    element?.classList.add('next-slide-anim');
    setIndex(next);
  };

  const afterChange = (index : number) => {
    let element = document.querySelector('.slick-active');
    element.classList.remove('next-slide-anim')
  };

  const settings = {
    slidesToShow: 1,
    slidesToScroll: 1,
    arrows: false,
    autoplay: false,
    autoplaySpeed: 2000,
    infinite: false,
    beforeChange,
    afterChange,
    useCSS: false,
    useTransform : false
  }

  const next = () => {
    sliderRef.current.slickNext()
  };

  const previous = () => {
    sliderRef.current.slickPrev();
  };

 <div className="home-slider">
            <div className="carousel">
              <Slider {...settings} className="carousel-inner" ref={ref => sliderRef.current = ref}>
                {
                  slides.map((slide: any, index) => (
                    <div className="carousel-item" key={index} ref={ref => carouselRef.current = ref}>
                      <div className="slide-content">
                        {index !== slides.length - 1 &&
                          <>
                            <h3>{slide.username}</h3>
                            <span id="user-icon-link">
                              <Link to="/" target="_blank">
                                <img src="/images/homeScreen/instagram.png" alt="link-icon" width="20" height="20" />{slide.userlink}</Link>
                            </span>
                          </>
                        }
                      </div>
                      <img src={slide.path} alt="Chicago" width="1100" height="500" />
                    </div>
                  ))
                }
              </Slider>
              {((slides.length !== 0) && (index !== slides.length - 1)) &&
                <>
                  {(index !== 0) && <a href="#/" className="carousel-control-prev" onClick={previous}>
                    <img src="/images/homeScreen/skipnewbtn.png" alt="Los Angeles" />
                  </a>}
                  {index !== slides.length - 1 && <a href="#/" className="carousel-control-next" id="next-btn" onClick={next}  >
                    <img src="/images/homeScreen/fast-forward-button.gif" alt="Los Angeles" />
                  </a>}
                </>
              }
            </div>
          </div>
EN

回答 2

Stack Overflow用户

发布于 2020-08-13 08:39:56

您可以使用传递给函数的索引值来获取beforeChange中的幻灯片元素,然后在相应的幻灯片中添加/删除类,而不是使用.slick-active。在看不到CSS的情况下,我猜你想要在beforeChange中添加动画,但如果效果更好,你可以随时将classList.add()移到你的afterChange中。

代码语言:javascript
复制
const beforeChange = (prev: number, next: number) => {
  const prevSlideElement = slider.current.innerSlider.list.querySelector(`[data-index="${prev}"]`);
  const nextSlideElement = slider.current.innerSlider.list.querySelector(`[data-index="${next}"]`);

  prevSlideElement.classList.remove('next-slide-anim');
  nextSlideElement.classList.add('next-slide-anim');
}
票数 0
EN

Stack Overflow用户

发布于 2021-02-15 22:13:11

Ed的反应很好,但还需要一个技巧!

beforeChange是在react-slick添加他的内部类如"current-slide“之前触发的,所以next-slide-anim被覆盖,动画不会出现……

为了纠正这个问题,我们需要调用一个Timeout函数来在下一次计时触发代码。

代码语言:javascript
复制
const beforeChange = (prev: number, next: number) => {
  const prevSlideElement = slider.current.innerSlider.list.querySelector(`[data-index="${prev}"]`);
  const nextSlideElement = slider.current.innerSlider.list.querySelector(`[data-index="${next}"]`);
  setTimeout(() => {
    prevSlideElement.classList.remove('next-slide-anim');
    nextSlideElement.classList.add('next-slide-anim');
  });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63379598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档