You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React Slick Slider的nextSlide与prevSlide上添加类名

基于Slick Slider钩子给前后幻灯片添加类的实现方案

首先需要注意Slick内置钩子的参数顺序,你现有代码里beforeChange的参数定义有误,完整可用的实现如下:

完整代码

// 通用方法:清空所有幻灯片的自定义类,避免类名残留
const clearSlickCustomClasses = (slickInstance) => {
  slickInstance.$slider.find('.slick-slide').removeClass('slick-prev-slide slick-next-slide slick-active-slide slick-sliding-in slick-sliding-out')
}

const settings = {
  dots: true,
  dotsClass: "slick-dots slick-thumb",
  centerMode: true,
  slidesToShow: 3,
  swipe: true,
  swipeToSlide: true,
  arrows: false,
  infinite: false,
  speed: 300,
  mobileFirst: true,
  // 初始化完成钩子
  onInit: function(event, slick) {
    clearSlickCustomClasses(slick)
    const currentIndex = slick.currentSlide
    // 给当前激活、上一张、下一张幻灯片加对应类
    slick.$slides.eq(currentIndex).addClass('slick-active-slide')
    currentIndex > 0 && slick.$slides.eq(currentIndex - 1).addClass('slick-prev-slide')
    currentIndex < slick.slideCount - 1 && slick.$slides.eq(currentIndex + 1).addClass('slick-next-slide')
  },
  // 切换开始前钩子
  beforeChange: function(event, slick, currentSlide, nextSlide) {
    console.log("before change", currentSlide, nextSlide);
    clearSlickCustomClasses(slick)
    // 按切换前的状态加类
    slick.$slides.eq(currentSlide).addClass('slick-active-slide')
    currentSlide > 0 && slick.$slides.eq(currentSlide - 1).addClass('slick-prev-slide')
    currentSlide < slick.slideCount - 1 && slick.$slides.eq(currentSlide + 1).addClass('slick-next-slide')
  },
  // 切换进行中钩子
  change: function(event, slick, currentSlide, nextSlide) {
    // 可按需添加切换过程中的过渡类
    slick.$slides.eq(nextSlide).addClass('slick-sliding-in')
    slick.$slides.eq(currentSlide).addClass('slick-sliding-out')
  },
  // 切换完成后钩子
  afterChange: function(event, slick, currentSlide) {
    console.log("after change", currentSlide);
    clearSlickCustomClasses(slick)
    // 按切换完成后的新状态加类
    slick.$slides.eq(currentSlide).addClass('slick-active-slide')
    currentSlide > 0 && slick.$slides.eq(currentSlide - 1).addClass('slick-prev-slide')
    currentSlide < slick.slideCount - 1 && slick.$slides.eq(currentSlide + 1).addClass('slick-next-slide')
  }
};

说明

  • 代码里的类名slick-prev-slide、slick-next-slide等可以根据你的实际需求替换成自定义类名
  • 已经做了边界判断,适配你配置的infinite: false场景,不会给不存在的首尾幻灯片外的元素加类

内容的提问来源于stack exchange,提问作者Salman Aziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:24:02