slick插件在tab中不显示(和display:none 冲突)

slick是一款非常强大的轮播组件,所以很多地方都会使用到。

最近项目出现了这种情况,就是在tab页中使用slick组件,因为tab是display属性控制的,当轮播slick在隐藏的tab中是不会显示的,因此就造成了,切换tab到轮播页面的时候轮播组件未正常工作,出现轮播页空白的情况。

这里其实slick api有提供对应的解决方案,那就是refresh()这个方法,我们要做的就是在tab页切换的时候调用一下refresh方法,让轮播组件重新加载一遍。

以下是具体方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<style>
   .tabSpan{
     width: 100px;
     height: 100px;
     backgorung: #000000;
     color: #ffffff;
     display: none;
   }
   .tabSpan:first-child{
     display: block;
   }
</style>
<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
</ul>
<div class="tabList">
  <div class="tabSpan">
    第一个tab页
  </div>
  <div class="tabSpan">
    第二个tab页面
  </div>
  <div class="tabSpan">
    第三个tab页面
    // 使用轮播插件
    <div class="yourLunbo">
      <div>
        <img src="../../icon/countryHonor.png">
      </div>
      <div>
        <img src="../../icon/countryHonor.png">
      </div>
      <div>
        <img src="../../icon/countryHonor.png">
      </div>
      <div>
       <img src="../../icon/countryHonor.png">
      </div>
    </div>
  </div>
</div>
<script>
  // tab切换
  $('li').click(function() {
    $('.tabSpan).css('dispaly', 'none');
    $('.tabSpan').eq($(this).index()).css('dispaly', 'block');

    // 以下是关键,切换tab初始化轮播插件
    $('.yourLunbo')[0].slick.refresh()
  });
  // 轮播初始化
  $(".yourLunbo").slick({
     dots: false,
     infinite: true,
     centerMode: true,
     slidesToShow: 3,
     slidesToScroll: 3
   });
</script>

总结:因为初始化的所有tab默认是dispaly:none属性,轮播继承了他的属性,在切换tab后tab页面的display属性更新,但是轮播组件没有更新,所以就导致了显示不出来的结果。所以在切换tab后需要重新刷新slick方法。

1
$('.youtLunbo')[0].slick.refresh()

以上就是解决tab中slick不能正常显示的解决方案,小伙伴如果有疑问可以第一时间评论或留言,看到后也会及时回复的,有帮助的麻烦动动手指点个赞哟!