一 :为什么选择swiper?
- 免费,开源,稳定,应用广泛。
- 可单独使用无需jquery,也可以结合jquery一起使用。
- 简单配置即可实现手机,平板网站的大部分触摸功能。
- 包括焦点图,tab,触摸滑动导航等。
swiper是纯javascript打造的滑动特效插件,面向手机,平板电脑等移动终端。它能实现触屏焦点图,触屏tab切换,触屏多图切换等常用效果。主要使用于移动端的网站,移动web apps,native apps 和hybrid apps 。主要是为ios而设计的,同时,在安卓,wp8系统也有良好的用户体验,swiper3.0开始将不再全面支持PC端。因此,如果需要在PC上兼容更多的浏览器,可以选择swiper2.x(甚至支持ie7).
二:swiper使用方法(以下出自swiper官网)
1:首先加载插件:需要使用的文件有swiper.mim.js和swiper.mim.css文件。
- <!DOCTYPE html>
- <html>
- <head>
- ...
- <link rel="stylesheet" href="path/to/swiper.min.css">
- </head>
- <body>
- ...
- <script src="path/to/swiper.min.js"></script>
- </body>
- </html>
如果你的页面加载了jquery.jd或者zepto.js,你可以选择使用更轻便的swiper.jquery.mim.js
- <!DOCTYPE html>
- <html>
- <head>
- ...
- <link rel="stylesheet" href="path/to/swiper.min.css">
- </head>
- <body>
- ...
- <script src="path/to/jquery.js"></script>
- <script src="path/to/swiper.jquery.min.js"></script>
- </body>
- </html>
2:html内容
- <div class="swiper-container">
- <div class="swiper-wrapper">
- <div class="swiper-slide">Slide 1</div>
- <div class="swiper-slide">Slide 2</div>
- <div class="swiper-slide">Slide 3</div>
- </div>
-
- <div class="swiper-pagination"></div>
-
-
- <div class="swiper-button-prev"></div>
- <div class="swiper-button-next"></div>
-
-
- <div class="swiper-scrollbar"></div>
- </div>
- 导航等组件可以放在container之外
3:初始化swiper,最好是紧靠</body>标签。
- <script>
- var mySwiper = new Swiper ('.swiper-container', {
- direction: 'vertical',
- loop: true,
-
- // 如果需要分页器
- pagination: '.swiper-pagination',
-
- // 如果需要前进后退按钮
- nextButton: '.swiper-button-next',
- prevButton: '.swiper-button-prev',
-
- // 如果需要滚动条
- scrollbar: '.swiper-scrollbar',
- })
- </script>
- </body>
如果不能写在html内容的后面,则需要在页面加载完成后再初始化。
- <script type="text/javascript">
- window.onload = function() {
- ...
- }
- </script>
或者这样(已经加载jquery和zepeto)
- <script type="text/javascript">
- $(document).ready(function () {
- ...
- })
- </script>
三:一些常用的的配置选项
1:一般选项
direction:swiper的滑动方向,可设置水平horizontal或垂直vertical。默认:水平horizontal。
speed:滑动速度,即slider自动滑动开始到结束的时间(单位MS)默认:300。
autoplay:自动切换的时间间隔(单位ms),设定该参数slide不会自动切换。默认:0.
freeMode:默认为false,slide滑动时滑动一格并自动贴合wrapper,设置为true则变为free模式,slide会根据惯性滑动且不会贴合。
scrollbar:出现滚动条。
- <div class="swiper-container">
- <div class="swiper-wrapper">
- <div class="swiper-slide">Slide 1</div>
- <div class="swiper-slide">Slide 2</div>
- <div class="swiper-slide">Slide 3</div>
- </div>
- <div class="swiper-scrollbar"></div>
- </div>
- <script type="text/javascript">
- var mySwiper = new Swiper('.swiper-container',{
- scrollbar:'.swiper-scrollbar',
- });
- </script>
scrollbarHide:滚动条是否自动隐藏,默认:ture会自动隐藏。
- <script type="text/javascript">
- var mySwiper2 = new Swiper('.swiper-container',{
- scrollbar:'.swiper-scrollbar' ,
- scrollbarHide:false,
- });
- </script>
preloadImages:默认为true,swiper会强制加载所有图片。
lazyLoading:设为true开启图片延迟加载,使preloadImages无效。需要将图片img标签的src改写成data-src,且增加类名swiper-lazy。
背景的延迟加载则增加属性增加属性data-background。
还可以为slide加一个预加载,
- <div class="swiper-lazy-preloader"></div>
- <div class="swiper-container">
- <div class="swiper-wrapper">
- <div class="swiper-slide">
- <img data-src="path/to/picture-1.jpg" class="swiper-lazy">
- <div class="swiper-lazy-preloader"></div>
- </div>
- <div class="swiper-slide">
- <img data-src="path/to/picture-2.jpg" class="swiper-lazy">
- <div class="swiper-lazy-preloader"></div>
- </div>
- <div class="swiper-slide">
- <div data-background="path/to/picture-3.jpg" class="swiper-lazy">slide3</div>
- </div>
- </div>
- </div>
- <script>
- var mySwiper = new Swiper('.swiper-container',{
- lazyLoading : true,
- })
- </script>
loop:设置为true则开启loop模式,loop模式:会在wrapper前后生成若干个slides让slides看起来是衔接的,用于无限循环切换。默认:false。
2:回调函数:
onInit(swiper):初始化后执行。
onTouchStart(swiper,even):当碰触到slider(不管slider有没有移动)时执行。
onTouchMove(swiper):手指触碰Swiper并滑动(手指)时执行。此时slide不一定会发生移动。
onTouchEnd(swiper, event):当释放slider时执行,释放即执行,不管slide有没有移动。
onSlideChangeStart(swiper):释放滑块时如果slider切换则执行。
onSlideChangeEnd(swiper):slide切换结束时执行。
onImagesReady(swiper):所有内置图像加载完成后执行。
onTransitionStart(swiper):slide过渡开始时触发。
onTransitionEnd(swiper):slide过渡结束时触发。
onTouchMoveOpposite
(swiper, event):当手指触碰swiper并且没有按照direction设定的方向移动时执行。
onSilderMove(
swiper, event
):手指触碰swiper并拖动slide时执行。
onClick(
swiper, event
):当你点击swiper执行。在移动端,click有200到300ms延迟,所以请用onTap来代替onClick作为点击事件。
onTap(
swiper, event
):当你轻触swiper后执行
onReachBeginning(
swiper):swiper切换到初始位置时执行。
onReachEnd(
swiper
):当切换到最后一个slide时执行。
- <pre name="code" class="html"><pre name="code" class="html"><script language="javascript">
- var mySwiper = new Swiper('.swiper-container',{
- onInit: function(swiper){
- //Swiper初始化了
- },
- onSlideChangeStart: function(swiper){
- alert('事件触发了;');
- },
- onSlideChangeEnd: function(swiper){
- alert('事件触发了;');
- }
- })
- </script>
四,举个例子---淘宝的抢购页面“淘抢购”

- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
- <title>Swiper demo</title>
-
- <link rel="stylesheet" href="swiper.min.css" />
-
- <style>
- body{margin: 0;padding: 0}
- .timeaxis-current:after {
- content: "";
- position: absolute;
- top: 100%;
- left: 0;
- right: 0;
- z-index: 18;
- display: block;
- height: 0;
- width: 0;
- margin: auto;
- border-top: 7px solid #fc353a;
- border-left: 9px solid transparent;
- border-right: 9px solid transparent;
- }
- #swiper-container3 {
- width: 100%;
- height: 60px;
-
- position: relative;
-
- left: 0;
- }#swiper-container3 .swiper-slide {
- height: 30px;
- width: 100px!important;
- font-size: 14px;
- text-align: center;
- color: #000;
- }
- .timeaxis-current {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 40%;
- right: 40%;
- z-index: 1;
- background: #fc353a;
- }
- .timeaxis_warp{position: relative; background: #2d3845;}
- .timeaxis-item-inner{line-height: 20px;padding-top: 8px;}
- </style>
- </head>
- <body>
-
- <div class="timeaxis_warp">
- <div class="timeaxis-current"></div>
- <div class="swiper-container" id="swiper-container3">
-
- <div class="swiper-wrapper">
- <div class="swiper-slide" data-num="0">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">17:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="1">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">19:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="2">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">21:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="3">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">22:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="4">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">23:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="5">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">00:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="6">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">06:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="7">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">08:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="8">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">10:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="9">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">12:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="10">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">13:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="11">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">15:00</div>
- <div class="timeaxis-info">已开抢</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="12">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">17:00</div>
- <div class="timeaxis-info">即将开场</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="13">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">19:00</div>
- <div class="timeaxis-info">即将开场</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="14">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">21:00</div>
- <div class="timeaxis-info">即将开场</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="15">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">22:00</div>
- <div class="timeaxis-info">即将开场</div>
- </div>
- </div>
- <div class="swiper-slide" data-num="16">
- <div class="timeaxis-item-inner">
- <div class="timeaxis-time">23:00</div>
- <div class="timeaxis-info">即将开场</div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
-
- <script src="swiper.min.js"></script>
-
- <script>
- var mySwiper = new Swiper('.swiper-container',{
-
- slidesPerView : "auto",/*设置slider容器能够同时显示的slides数量(carousel模式)。可以设置为number或者 'auto'则自动根据slides的宽度来设定数量。*/
- freeMode : true, /*自动贴合*/
- freeModeSticky : true,/*自动贴合。*/
- centeredSlides : true,/*设定为true时,活动块会居中,而不是默认状态下的居左。*/
- slideToClickedSlide:true,/*设置为true则swiping时点击slide会过渡到这个slide。*/
- centeredSlides : true,/*设定为true时,活动块会居中,而不是默认状态下的居左。*/
- onInit: function(swiper){ /*回调函数,初始化后执行。*/
- $(".swiper-slide-active").css({
- "color": '#fff',
- "font-weight": 'bold'
- });
- },
-
- onTransitionEnd: function(){
- /* alert( $(".swiper-slide-active").attr("data-num")); ajax传参数*/
- $(".swiper-slide-active").css({
- "color": '#fff',
- "font-weight": 'bold'
- });
- },
- onTouchMove: function(){
- $(".swiper-slide").not('.swiper-slide-active').css({
- "color": '#000',
- "font-weight": 'normal'
- });
- }
-
- })
- </script>
- <script>
- </script>
- </body>
- </html>
效果
三:swiper animated 使用方法:
swiper animated是swiper中文网提供的用于在swiper内快速制作css3动画效果的小插件,适用于swiper2.x和swiper3.x.
注意:此插件不适用于loop模式。
1:使用swiper animate需要先加载swiper.animate.mim.js和animate.mim.css。
- <!DOCTYPE html>
- <html>
- <head>
- ...
- <link rel="stylesheet" href="path/to/swiper.min.css">
- <link rel="stylesheet" href="path/to/animate.min.css">
- </head>
- <body>
- ...
- <script src="path/to/swiper.min.js"></script>
- <script src="path/to/swiper.animate.min.js"></script>
- </body>
- </html>
2:初始化时隐藏元素并在需要时开始动画。
- <script>
- var mySwiper = new Swiper ('.swiper-container', {
- onInit: function(swiper){ //Swiper2.x的初始化是onFirstInit
- swiperAnimateCache(swiper); //隐藏动画元素
- swiperAnimate(swiper); //初始化完成开始动画
- },
- onSlideChangeEnd: function(swiper){
- swiperAnimate(swiper); //每个slide切换结束时也运行当前slide动画
- }
- })
- </script>
- </body>
3:在需要运动的元素上面增加类名 ani。
swiper animate需要指定的几个参数。
swiper-animate-effect:切换效果,例如:fadeInUp;
swiper-animate-duration:可选,动画持续时间(单位秒),如:0.5s;
swiper-animate-delay:可选,动画延迟时间(单位秒),如0.3s.
- <div class="swiper-slide">
- <p class="ani" swiper-animate-effect="fadeInUp" swiper-animate-duration="0.5s" swiper-animate-delay="0.3s">内容</p>
- </div>