欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

idangerous swipe Swiper slider 焦点图 幻灯片 具有硬件加速的移动端触摸滑块插件 特别是演示效果 有大用 有大大用 有大大大用

在之前给大家分享过一款移动端的内容滑块插件《Swipe JS – 移动WEB页面内容触摸滑动类库》,但该插件存在几个缺点,导致使用起来有点困难。很多同学都来问觉唯,该怎么解决呢?那么觉唯就为大家解决这个问题,解决方案是使用另外一个功能极其强大的插件:Swiper – Mobile touch slider and framework with hardware accelerated transitions。按照觉唯惯例,demo先送上,一共有19个演示效果,大家可以前往体验。

Mobile-touch-slider

演示地址 下载附件

Swiper是由iDangero.us开发的一款免费移动端触摸滑块幻灯片插件,不但能够适用于各种操作系统的手机,还能够利用HTML5的硬件加速功能来完成滑块的切换效果,其效果以及实用性非常强。该插件原主要适用于iOS的设计,但也适用于Android、Windows Phone和最新的桌面浏览器,当然也可以使用在APP上,如微信、QQ等等。

一、Swiper的特点

下面就为大家介绍下该插件的特点:

1、1:1 触控运动
Swiper默认为1:1的触控距离,比率可以自定义。

2、触控模拟
能让鼠标也支持触摸滑动效果,可以在PC端也能滑动起来,也就是支持在电脑端鼠标滑动。

3、水平或垂直
有两种运动模式,horizontal(水平滑动)以及vertical(垂直滑动)。

4、自由模式
能够让slides无需定位,就像通常的滑动条。(可以在演示地址体验)

5、旋转调整
Swiper 在移动设备旋转后可以自适应尺寸,可以自动根据设备旋转和缩放。

6、响应式布局
slides的高度使用百分比来设置,从而解决不同移动端的适配。

7、滑动阻止
会自动限制一种模式,水平或者垂直。

8、滑块反弹
反弹机制,当滑块到达最左或者最右(最上或者最下)的位置时,会触发回弹效果。

9、原生动态
使用原生的转换效果,html5动画属性。

10、内置分页控制
能自动生成分页控制机制,可以指定控制器的标签pagination。

11、自动播放
Swiper可以设置自动播放,以及自动播放的延迟时间。

12、循环模式
可以自由设置开启和关闭,开启后,能够无限的播放幻灯片,到了最后一个位置时,会切换回第一个(无缝切换)。

13、旋转模式
能够让你在slides父容器下设置你所需要展示的slides数量来旋转播放。

14、滚动容器
该功能可以在容器里面滚动内容(不是指幻灯片,而是幻灯片里面的内容滚动),特别适用于APP的开发效果。

15、嵌套幻灯片
能够将swiper嵌套入各种不同的Swiper的slide里面,例如第一个slide里面可以放在一个水平的,而第二个slide里面可以放置垂直的。

16、放置HTML标签
该幻灯片插件,不只是允许放置图片标签,而且可以放置任意的HTML标签,例如文本、视频等等。

17、硬件加速
swiper可以使用设备硬件加速技术,能大幅度的改善动画效果以及优美的流畅性,特别是在IOS系统里面表现的更加完美(硬件加速需要设备支持)。

18、丰富的API接口
swiper拥有着非常丰富的api接口,例如:onTouchStart、onTouchMove、onTouchEnd、onSlideSwitc、autoplay等等。

19、灵活的配置
Swiper在初始化的时候能够接受多个参数,可以非常灵活的配置插件的效果。

20、插件API
Swiper从1.7版本开始就变的更加强大,因为有更多而简单的插件API允许开发者创造属于自己的Swiper 插件或通过Swiper的核心创制hooks(挂钩)(该官网处提供了几款优秀的插件Swiper smooth progress, Swiper hash navigation,swiper scrollbar)。

21、良好的兼容性
Swiper通用性的测试环境:移动端的Safari(iOS5下),Android 2.1+,windows Phone 8,以及最新版本的谷歌浏览器(Chrome),Safari,Firefox,IE10 以及欧朋浏览器(Opera)。

22、对IE的兼容
能够兼容IE7以上的版本,在IE7中使用的DOM动画,而非css transitions切换,所以需要引入jQuery。

23、独立性
Swiper不依赖像jQuery那样的js类库,这样子Swiper会更加的小型以及快速,从而使用不同的手机设备环境。但Swiper也能很安全地应用诸如jQuery、jQuery Mobile,jQTouch等等其他的js类库。

24、超轻量级
压缩后仅仅10KB左右,独立运行,不依靠第三方类库。

看完之后是不是感觉很激动?基本上此插件可以完成大部分的移动滑块的需求了。

二、Swiper的使用

那么接下来就跟大家说下简单的用法,首先引入核心文件js,以及自带的默认css样式表:

<link rel="stylesheet" href="../dist/idangerous.swiper.css" rel="external nofollow" >
<script defer src="../dist/idangerous.swiper.min.js"></script>

HTML结构以及插件初始化配置:

<div class="device">
     <a class="arrow-left" href="#" rel="external nofollow"  rel="external nofollow" ></a> 
     <a class="arrow-right" href="#" rel="external nofollow"  rel="external nofollow" ></a>
     <div class="swiper-container">
       <div class="swiper-wrapper">
         <div class="swiper-slide"> <img src="http://static.jiawin.com/uploads/2015/01/05142321afe81f00b1a4495.png"> </div>
         <div class="swiper-slide"> <img src="http://static.jiawin.com/uploads/2015/01/05142321afe81f00b1a4495.png"> </div>
         <div class="swiper-slide">
           <div class="content-slide">
             <p class="title">Slide with HTML</p>
             <p>在这里放置任意html,例如html文本、视频。</p>
             <p><a href="http://www.jiawin.com/">觉唯网</a>,推崇以用户为中心的设计理念,致力于为设计爱好者提供一个良好的学习交流平台。</p>
           </div>
         </div>
       </div>
    </div>
    <div class="pagination"></div>
</div>

插件初始化配置:

<script>
var mySwiper = new Swiper('.swiper-container',{
     pagination: '.pagination',
     loop:true,
     grabCursor: true,
     paginationClickable: true
})
$('.arrow-left').on('click', function(e){
     e.preventDefault()
     mySwiper.swipePrev()
})
$('.arrow-right').on('click', function(e){
     e.preventDefault()
     mySwiper.swipeNext()
})
</script>

通过上面的代码输出,就可以使用这个插件了。操作使用起来还是挺方便的,代码也不会很复杂。

演示地址 下载附件

关于这个插件的更多API使用方法以及参数,大家可以前往官网查询:http://www.idangero.us/sliders/swiper/api.php

 

全部评论 / 37

  1. Javin zhong

    你说的应该是禁止惯性回弹效果,可以试下 freeModeMomentumBounce: false 。具体可以看官网API http://idangero.us/swiper/api/#.V5hAtJN96u4

    1号杂工 Javin zhong 2周前
    1. DO IT

      求救! Uncaught ReferenceError: Swiper is not defined 是什么情况?

      DO IT 2015-01-07
      15
    2. agtma

      或者简单说需要哪些知识,我去学习一下。

      agtma 2015-01-07
  • gggg

    :grin: :cool: :mrgreen: O(∩_∩)O哈哈哈~

    gggg 2015-01-07
  • shaoshan

    带分页器的切换,在同一个页面使用多次效果,出现切换不正确是怎么回事,上面的四张图片显示三个分页,下面的三张图片显示四个分页并且分页切换锁定不了都是一个颜色只有切换!在线求教!谢谢管理员回复!

    shaoshan 2015-01-07
    11
  • Javin zhong

    autoplayDisableOnInteraction : false
    当设置为false时,用户操作之后(swipes,arrow以及pagination 点击)autoplay不会被禁掉,用户操作之后每次都会重新启动autoplay。

    1号杂工 Javin 2015-01-07
  • 小姚

    还有就是,案例中,19-chaining.html,里面有写两个一起的,但是里面有两个bug:
    第一,第二个幻灯没有圆点按钮;
    第二,点击第一个幻灯圆点按钮,只能控制第二个的幻灯;
    第三,点击第一个幻灯左右按键,第一个圆点没有切换;
    第四,点击第二个幻灯左右按键,第一个圆点按钮居然切换了;

    小姚 2015-01-07
  1. tyiling

    莫有报错 就是不管上拉还是下拉,页面都不动

    tyiling 2015-01-07
  2. tyiling

    终于好了,这个千年BUG,把这个计算高度的JS换了一个位置,谢谢

    tyiling 2015-01-07
  3. tyiling

    demo18 里的swiper-container高度为什么一定要设置成height:100% 一般在手机端的页面里都会有一个头部和底部,而且底部一般是绝对定位的,现在swiper-container里height:100%,再加一个绝对定位的底部,页面里的内容就一直展示不完全,改成height:auto时,又会出现最开始的问题,上下拉,页面都不动,请问,有什么方法可以解决这个bug

    tyiling 2015-01-07
  4. tyiling

    demo18下拉刷新 为什么在“”外面再套一个div时,页面就不能往上滑动了“<div class="swiper-wrapper" style="padding-top: 0px; padding-bottom: 0px; transition-duration: 0.3s; -webkit-transition-duration: 0.3s; transform: translate3d(0px, 0px, 0px); -webkit-transform: translate3d(0px, 0px, 0px); ”里的translate3d的第二个值一直为0,不能记录最新的Y值,求解

    tyiling 2015-01-07
    8
  5. gggg

    楼主你好!我想问下这个插件用在手机端上面,在苹果上面还好不卡。但是在安卓上面就会有点卡!如果加载图片多了的话,还有音乐等就会很卡。哟解决办法么?

    凉城 2015-01-07
    6
  6. Javin zhong

    可以查看官方AIP,有各种回调函数的方法。例如:onTouchStart、onTouchMove、onTouchEnd、onSlideReset

    1号杂工 Javin 2015-01-07
  • Javin zhong

    是可以自适应高度的。通过css实现。

    1号杂工 Javin 2015-01-07

    下面是自己亲自做的例子,不理想 (用的是Swipe)


     1) 引入 css js  见附件     自己亲自做的css.js_ok

      <link href="{dede:global.cfg_templets_skin/}/style/guanxinghuadong/idangerous.swiper.css" rel="stylesheet" media="screen" type="text/css"/>

        <link href="{dede:global.cfg_templets_skin/}/style/swipe.css" rel="stylesheet" media="screen" type="text/css"/>

    <script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/jquery-1.8.0.min.js"></script>

     <script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/fontscroll.js"></script>


        <script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/jquery.SuperSlide.js"></script>

        <script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/Swipe.js"></script>

        <script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/guanxinghuadong/idangerous.swiper.js"></script>


    2) 在html中的代码

    <div class="zypx_common_outer hdp_outer">

        <div class="indexBan_box" id="indexBan_img">

            <ul class="indexBan_wrap">

             

                <li> <img

                        src="{dede:global.cfg_templets_skin/}/images/shrszgxy/hdp1.jpg">

                </li>

               <li> <img

                        src="{dede:global.cfg_templets_skin/}/images/shrszgxy/hdp2.jpg">

                </li>

                 <li> <img

                        src="{dede:global.cfg_templets_skin/}/images/shrszgxy/hdp3.jpg">

                </li>

                 <li> <img

                        src="{dede:global.cfg_templets_skin/}/images/shrszgxy/hdp4.jpg">

                </li>

                 <li> <img

                        src="{dede:global.cfg_templets_skin/}/images/shrszgxy/hdp5.jpg">

                </li>



            </ul>

            <a href="javascript:void(0);" class="prev_a" id="hdp_prev_a" ><img src="{dede:global.cfg_templets_skin/}/images/shrszgxy/prev.png" alt=""></a>

            <a href="javascript:void(0);" class="prev_a next_a" id="hdp_next_a" ><img src="{dede:global.cfg_templets_skin/}/images/shrszgxy/next.png" alt=""></a>

        </div>

    </div>


    <script type="text/javascript">

        // JavaScript Document

        var slider2 = Swipe(document.getElementById('indexBan_img'), {

            auto: 6000,

            continuous: true,

            callback: function (pos) {

    //            var i = bullets.length;

    //            while (i--) {

    //                bullets[i].className = ' ';

    //            }

    //            bullets[pos].className = 'on';

            }

        });

    $(document).ready(function(e) {

    $('#hdp_prev_a').on('click', function(e){

                 e.preventDefault()

                 slider2.prev()

            })

            $('#hdp_next_a').on('click', function(e){

                 e.preventDefault()

                 slider2.next()

            })

            

        });

    </script>



    下面是我自己亲自做的 有大用  有大大用 ( 用的是Swiper )


     1) 引入 css js  见附件     自己亲自做的css.js_ok

      <link href="{dede:global.cfg_templets_skin/}/style/guanxinghuadong/idangerous.swiper.css" rel="stylesheet" media="screen" type="text/css"/>

        <link href="{dede:global.cfg_templets_skin/}/style/swipe.css" rel="stylesheet" media="screen" type="text/css"/>

    <script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/jquery-1.8.0.min.js"></script>

     <script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/fontscroll.js"></script>


        <script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/jquery.SuperSlide.js"></script>

        <script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/Swipe.js"></script>  (这个好像不需要,因为它是 Swipe,不是Swiper)

        <script type="text/javascript" src="{dede:global.cfg_templets_skin/}/js/guanxinghuadong/idangerous.swiper.js"></script>


    2) 在html中的代码

    <div  class="swiper-container2" id="indexBan_img2">

            <div class="swiper-wrapper">

                <!-- 下面是4个不同颜色的轮播滑块 -->

                <div style="background-color: red;" class="swiper-slide"><img src="{dede:global.cfg_templets_skin/}/images/shrszgxy/hdp1.jpg"></div>

                <div style="background-color: green;" class="swiper-slide"><img src="{dede:global.cfg_templets_skin/}/images/shrszgxy/hdp2.jpg"></div>

                <div style="background-color: yellow;" class="swiper-slide"><img src="{dede:global.cfg_templets_skin/}/images/shrszgxy/hdp3.jpg"></div>

                <div style="background-color: blue;" class="swiper-slide"><img src="{dede:global.cfg_templets_skin/}/images/shrszgxy/hdp4.jpg"></div>

            </div>

            <a class="swiper-button-prev" href="javascript:void(0);" ><img src="{dede:global.cfg_templets_skin/}/images/shrszgxy/prev.png" alt=""></a><!--左箭头-->

            <a class="swiper-button-next"  href="javascript:void(0);" ><img src="{dede:global.cfg_templets_skin/}/images/shrszgxy/next.png" alt=""></a><!--右箭头-->

          

        </div>



    <script type="text/javascript">

        // JavaScript Document

        var slider2 = new Swiper('.swiper-container2', {

       

        autoplay:2000,


        autoplayDisableOnInteraction : false,

        loop : true,//循环

         

        });

    $(document).ready(function(e) {

            $('.swiper-button-prev').click(function(e){

      e.preventDefault()

                  slider2.swipePrev()

    });

    $('.swiper-button-next').click(function(e){

      e.preventDefault()

                  slider2.swipeNext()

    });

        });

    </script>



    Swipe JS – 移动WEB页面内容触摸滑动类库

    分类栏目:用户体验 - 前端开发


    2015年1月7日更新:该插件存在些许不足,更多解决方案请戳《Swiper slider 具有硬件加速的移动端触摸滑块插件》。

    想必做移动前端的同学经常会接到这样子的一个需求,就是在移动设备页面上的banner图能够用手指触摸左右或上下的滑动切换,这在移动设备是个很常见的一个效果,其用户体验远甚于点击一个按钮区域,通过手指的触摸操作也是移动设备的中一个特性,我们必须专业化的处理,哈哈。其实实现原理很简单,但平常中自己开发不是很方便。

    今天就为大家带来这样子的一个轻量级js触摸滑动类库 – Swipe JS。这是一个非常小的一个javascript类库,但他的功能却不简单,它可以用来展示web页面上的任何内容,支持精确的触摸移动操作,而且还可以设置自动播放、等比例缩放等等实用性的功能。

    移动设备触摸滑动展示

    查看预览下载附件

    erweima

    用手机浏览才能体验到触摸滑动的效果哦!

    Swipe函数介绍

    下面就为大家介绍下Swipe JS的使用方法,Swipe有以下几个参数:

    startSlide: 4,  //起始图片切换的索引位置
    auto: 3000, //设置自动切换时间,单位毫秒
    continuous: true,  //无限循环的图片切换效果
    disableScroll: true,  //阻止由于触摸而滚动屏幕
    stopPropagation: false,  //停止滑动事件
    callback: function(index, element) {},  //回调函数,切换时触发
    transitionEnd: function(index, element) {}  //回调函数,切换结束调用该函数。

    除此之外,还有一些比较使用的API方法,例如:

    • prev():上一页

    • next():下一页

    • getPos():获取当前页的索引

    • getNumSlides():获取所有项的个数

    • slide(index, duration):滑动方法

    Swipe使用方法

    了解基本函数方法后,我们就来看看使用方法。

    首先是HTML结构:

    <div id="slider" class="swipe">
      <div class="swipe-wrap">
        <div></div>
        <div></div>
        <div></div>
      </div>
    </div>

    然后是样式代码:

    .swipe {
    	overflow: hidden;
    	visibility: hidden;
    	position: relative;
    }
    .swipe-wrap {
    	overflow: hidden;
    	position: relative;
    }
    .swipe-wrap > figure {
    	
    	width: 100%;
    	position: relative;
    }

    最后设置JS绑定以及参数设置:

    var slider = Swipe(document.getElementById('slider'), {
       …………
       …………
    });

    在这里只要把上面介绍的函数参数写在里面,就可以实现相对应的功能。

    最后我们也可以给滑动切换添加上下按钮:

    <button onclick="Swipe.prev()">prev</button>
    <button onclick="Swipe.next()">next</button>

    到这里我们已经完成了图片滑动的效果了,是不是非常的方便快捷呢?赶紧动手试试看吧。

    查看预览下载附件

    如果你有类似的优秀js类库,不妨和我们一起分享,让我们进步的更快。

    Swipe 官网:http://bradbirdsall.com/


    2015年1月7日更新:该插件存在些许不足,更多解决方案请戳《Swiper slider 具有硬件加速的移动端触摸滑块插件》。

     

    全部评论 / 57

    1. joel

      在不同的项目可以选择适合的解决方案。

      joel 2013-08-03
      19
    2. Javin zhong

      不错的解决方案,赞一个;在不同的项目可以选择适合的解决方案。 :wink:

      1号杂工 Javin 2013-08-03
    • 有bug,手动滑过之后就不自动播放了~不知道怎么解决了~

      ying 2013-08-03
      16
    • Javin zhong

      只有在两张图片的时候,这个插件存在一些bug。

      1号杂工 Javin 2013-08-03 
    • 有bug!android手机,自动切换功能在手滑动之后失效了。

      colorski.com 2013-08-03
      13
    • 这个不错。但是为何没有上下滑动效果呢?

      朱明 2013-08-03




    Swiper 手动滑过之后 失效 点击分页器之后不能继续轮播



    现代版本

    解决方法:


    var swiper = new Swiper('#swiper1', {


          pagination: {


              el: '.swiper-pagination',


          },


          autoplay:true,


          loop:true,


          autoplay: {


              disableOnInteraction: false


          }


    });

    ————————————————

    早期版本

     <script>

       var mySwiper = new Swiper('.swiper-container',

        {

          autoplay : 5000,

          autoplayDisableOnInteraction : false,

        })

    </script>




    普通分类: