您当前的位置:首页 > 网站建设笔记 >

swiper多行多列无缝滚动demo示例代码

0

要实现swiper无缝滚动之前,我们先来了解CSS的transition-timing-function属性。

定义和用法

transition-timing-function 属性规定过渡效果的速度曲线。

该属性允许过渡效果随着时间来改变其速度。

默认值:ease
继承性:no
版本:CSS3
语法:transition-timing-function:linear|ease|ease-in|ease-out|ease-in-out|cubic-bezier(n,n,n,n);
JavaScript语法:object.style.transitionTimingFunction="linear"
描述
linear规定以相同速度开始至结束的过渡效果(等于cubic-bezier(0,0,1,1))
ease规定慢速开始,然后变快,然后慢速结束的过渡效果(等于cubic-bezier(0.25,0.1,0.25,1))
ease-in规定以慢速开始的过渡效果(等于cubic-bezier(0.42,0,1,1))
ease-out规定以慢速结束的过渡效果(等于cubic-bezier(0,0,0.58,1))
ease-in-out规定以慢速开始和结束的过渡效果(等于cubic-bezier(0.42,0,0.58,1))
cubic-bezier(n,n,n,n)在cubic-bezier函数中定义自己的值。可能的值是0至1之间的数值。

再来打开swiper的CSS代码,看看transition-timing-function属性设置了什么值,相关代码如下(swiper-7.4.1版本的swiper-bundle.css文件第35行):

.swiper-wrapper {
  position: relative;
  width: 100%;
  height: 100%;
  z-index: 1;
  display: flex;
  /*
  transition-property 属性规定应用过渡效果的CSS属性的名称(默认值:all)
  transition-duration 属性规定完成过渡效果需要花费的时间,以秒或毫秒计(默认值:0)
  transition-timing-function 属性规定过渡效果的速度曲线(默认值:ease)
  */
  transition-property: transform;
  box-sizing: content-box;
}

通过查看以上代码,没有显式设置transition-timing-function的属性值,则默认值为ease(规定慢速开始,然后变快,然后慢速结束的过渡效果),而要实现无缝滚动则需要把这个属性值设置为linear(规定以相同速度开始至结束的过渡效果)。让我们来创建一个swiper两行四列的无缝滚动图片列表,使用方法示例如下:

<style type="text/css">
.gridtwo .swiper {width:720px;height:240px;padding:5px 0 15px 0;}
.gridtwo .swiper-wrapper {
-webkit-transition-timing-function:linear;
-moz-transition-timing-function:linear;
-ms-transition-timing-function:linear;
-o-transition-timing-function:linear;
transition-timing-function:linear;
}
.gridtwo .swiper-slide {height:120px;}
.gridtwo .pic {width:150px;height:100px;margin:10px 15px;background:rgb(255,255,255);border-radius:6px;box-shadow:0px 4px 12px 2px rgb(182,182,182);display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;align-items:center;position:relative;}
.gridtwo .pic img {width:150px;height:100px;border-radius:6px;}
.gridtwo p {position:absolute;bottom:0;left:0;margin:0;padding:0;color:#FFF;display:inline-block;padding:0 11px;background-color:rgba(0,0,0,.6);border-radius:0 6px 0 6px;}
</style>

<script type="text/javascript">
var gridtwo= new Swiper('.gridtwo .swiper',{
  slidesPerView:4,
  spaceBetween:0,
  speed:2500,
  grid:{
    //设置网格的排列方向,默认column为竖向,row为横向。
    //当设置为column时,需要设置swiper的高度。
    fill:'column',
    //设置网格中Slide的行数。
    //当设置row>1时目前还不兼容loop模式(loop:true)。
    //在Slide数量不足以填满的情况下可能会出现布局不理想(例如4行3列,但是只有10个Slide),建议使用空的Slide将数量补足。
    rows:2
  },
  autoplay:{
    //自动切换的时间间隔,单位ms
    delay:0,
    //如果设置为true,当切换到最后一个slide时停止自动切换(loop模式下无效)
    stopOnLastSlide:false,
    //用户操作swiper之后,是否禁止autoplay。默认为true:停止。
    //如果设置为false,用户操作swiper之后自动切换不会停止,每次都会重新启动autoplay。
    //操作包括触碰(touch),拖动,点击pagination等。
    disableOnInteraction:false,
    //开启此功能,鼠标置于swiper时暂停自动切换,鼠标离开时恢复自动切换。
    //如果你还开启了disableOnInteraction,那么自动切换不会恢复。
    pauseOnMouseEnter:false,
  }
});
</script>
蟠桃

1 蟠桃

慈溪杨梅

2 慈溪杨梅

百香果

3 百香果

橙子

4 橙子

洛川苹果

5 洛川苹果

猕猴桃

6 猕猴桃

柚子树

7 柚子树

赣南脐橙

8 赣南脐橙

桑葚

9 桑葚

山楂

10 山楂

葡萄

11 葡萄

蟠桃

12 蟠桃

慈溪杨梅

13 慈溪杨梅

百香果

14 百香果

橙子

15 橙子

洛川苹果

16 洛川苹果

猕猴桃

17 猕猴桃

柚子树

18 柚子树

赣南脐橙

19 赣南脐橙

桑葚

20 桑葚

山楂

21 山楂

葡萄

22 葡萄

虽然swiper7.0以上版本提供了Grid(网格/多行多列布局)组件功能,但当设置row>1(网格中Slide的行数)时目前还不兼容loop模式,所以大家看到以上图片滚动列表在滚动到最后一个slide(22 葡萄)时立即滑动回第一个slide的位置,这与我们期待的效果有偏差。那有没有其他办法既可以实现自定义多行多列又支持loop模式?答案是有的,以下方法不使用Grid网格功能,在每个swiper-slide里输出多条信息(在这里是:每个swiper-slide里输出三个图片)来模仿多行多列的布局,缺点是:如果需要修改排列方向则要重新修改HTML和CSS,而不能像Grid组件功能那样只需修改下某个参数值便可达到。效果如下所示:

  • 蟠桃

    1 蟠桃

  • 慈溪杨梅

    2 慈溪杨梅

  • 百香果

    3 百香果

  • 橙子

    4 橙子

  • 洛川苹果

    5 洛川苹果

  • 猕猴桃

    6 猕猴桃

  • 柚子树

    7 柚子树

  • 赣南脐橙

    8 赣南脐橙

  • 桑葚

    9 桑葚

  • 山楂

    10 山楂

  • 葡萄

    11 葡萄

  • 蟠桃

    12 蟠桃

  • 慈溪杨梅

    13 慈溪杨梅

  • 百香果

    14 百香果

  • 橙子

    15 橙子

  • 洛川苹果

    16 洛川苹果

  • 猕猴桃

    17 猕猴桃

  • 柚子树

    18 柚子树

  • 赣南脐橙

    19 赣南脐橙

  • 桑葚

    20 桑葚

  • 山楂

    21 山楂

  • 葡萄

    22 葡萄

我们可以看到,以上图片滚动列表在滚动到最后一个slide(22 葡萄)时,不会像第一个图片滚动列表那样直接反方向滑动回第一个slide的位置,而是看起来像是循环的。让我们来再做一个两行四列横向排列的(实现原理:每个swiper-slide里输出八个图片,然后使用Flex布局的flex-direction属性控制排列方向),效果如下所示:

  • 蟠桃

    1 蟠桃

  • 慈溪杨梅

    2 慈溪杨梅

  • 百香果

    3 百香果

  • 橙子

    4 橙子

  • 洛川苹果

    5 洛川苹果

  • 猕猴桃

    6 猕猴桃

  • 柚子树

    7 柚子树

  • 赣南脐橙

    8 赣南脐橙

  • 桑葚

    9 桑葚

  • 山楂

    10 山楂

  • 葡萄

    11 葡萄

  • 蟠桃

    12 蟠桃

  • 慈溪杨梅

    13 慈溪杨梅

  • 百香果

    14 百香果

  • 橙子

    15 橙子

  • 洛川苹果

    16 洛川苹果

  • 猕猴桃

    17 猕猴桃

  • 柚子树

    18 柚子树

  • 赣南脐橙

    19 赣南脐橙

  • 桑葚

    20 桑葚

  • 山楂

    21 山楂

  • 葡萄

    22 葡萄

建站咨询

咨询热线

微信交流

返回顶部