好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

swiper

swiper

@H_ 404 _6@Swiper 常用于移动端网站的 内容 触摸滑动
Swiper 是纯 JavaScript 打造的滑动特效 插件 ,面向手机、平板电脑等移动终端。

@H_ 404 _6@ swiper.js 在国内使用面非常广,可以用于实现轮播、 图片 预览、可滚动应用等,发挥想象可是实现诸多需求。

@H_ 404 _6@本篇幅采用 swiper5 ,所有版本的 api 都很相似,主要区别可以参考 官方的提供的说明 。

1. 使用

    < style  >   
    .container    {  height  :  px ;  overflow  :  hidden ;  } 
    .slide-item    {   dis play  :  flex ;  justify-content  :  center ;  align-items  :  center ;  color  :  white ;  font-size  :  px ;  } 
    .item1    {  background-color  :  cornflowerblue ;  } 
    .item2    {  background-color  :  darkslateblue ;  } 
    .item3    {  background-color  :  darkorange ;  } 
    </ style  >  

   < div   class   =  " container "   >  
     < div   class   =  " swiper-wrapper "   >  
       < div   class   =  " swiper-slide slide-item item1 "   >  第一屏   </ div  >  
       < div   class   =  " swiper-slide slide-item item2 "   >  第二屏   </ div  >  
       < div   class   =  " swiper-slide slide-item item3 "   >  第三屏   </ div  >  
     </ div  >  
   </ div  >  
   < link   href   =  " https://cdn.bootcdn.net/ajax/libs/Swiper/5.4.5/css/swiper.min.css "    rel   =  " stylesheet "   >  
   < script   src   =  " https://cdn.bootcdn.net/ajax/libs/Swiper/5.4.5/js/swiper.min.js "   >       </ script  >  
   < script  >   
   var  mySwiper  =   new   Swiper  (  '.container'  ,   { 
    a utop lay :   true  ,   //  自动 切页 
   }  )  ; 
    </ script  >  
 

@H_ 404 _6@ swiper 需要引入两个资源,通常和 UI 相关的框架都会有两个及以上资源,需要额外引入样式。

@H_ 404 _6@轮播是非常常见的需求,只需一些简单的 DOM 结构就可以完成。

@H_ 404 _6@ .swiper-wrapper 和 .swiper-slide 两个类是和 swiper 联动的,swiper 在初始化的时候会在 swiper-wrapper 下 swiper-slide 作为每一项,这些类名都是可通过配置 修改 的。

2. 使用 swiper 实现移动端的 图片 预览

@H_ 404 _6@移动端产品的 图片 查看几乎都是全屏预览,可以作用滑动切换图, 支持 缩放手势等,swiper 天然 支持 这些 功能 ,同时又可以深度定制,适合制作业务组建嵌入项目。

@H_ 404 _6@分析一下需求:点击 图片 查看大图, 图片 可以手势缩放,同时 支持 左右切换。

@H_ 404 _6@其实这就是 一个 不会 自动 切换的轮播,通过 swiper 就能实现。

@H_ 404 _6@可以设计 一个 方法 , 方法 接收 当前 图片 和所有 图片 列表,然后每个 图片 为一页, 生成 一个 轮播, 显示 在 页面 的最上层。

  <!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 =no "   >  
   </ head  >  
   < body  >  
     < style  >   
      .container    {  position  :  fixed ;  top  :   ;  b ott om  :   ;  right  :   ;  left  :   ;  background-color  :   rgba  ( , , ,  )  ;  } 
      .container   .swiper-pagination    {   dis play  :  none ;  } 
      .slide-item    {  overflow  :  hidden ;  } 
      .slide-item  img   {  width  :   ;  } 
      .count    {  position  :  absolute ;  left  :   ;  transform  :   translateX  ( - )  ;  top  :  px ;  color  :  white ;  } 
      </ style  >  
  
     < link   href   =  " https://cdn.bootcdn.net/ajax/libs/Swiper/5.4.5/css/swiper.min.css "    rel   =  " stylesheet "   >  
     < script   src   =  " https://cdn.bootcdn.net/ajax/libs/Swiper/5.4.5/js/swiper.min.js "   >       </ script  >  
     < script  >   
   function   previewImage  ( current ,  list )   { 
     if   (  ! list )  list  =   [ current ]  ;   // 如果没传, 默 认以初始图为列表 

     if   ( list . length  ===   )  list  =   [ current ]  ;   // 如果数组为空 则以初始图为列表 
  
     var  idx  =   ;   // 寻找初始图在列表的位置 
     var  html  =  list .  map  (  function  ( item ,  index )   { 
       if   ( item  ===  current )   {   // 如果两个图 url 相等,则说明初始图就是 在这 个位置 
        idx  =  index  +   ;   // 记录下位置 
       } 
  
       // 拼 一个  swiper-slide 
       return   [ 
         '<div class="swiper-slide slide-item">'  , 
           '<div class="swiper-zoom-container">'  ,   // 应用缩放配置项要提供这个节点 
             '<img src="'   +  item  +   '" />'  , 
           '</div>'  , 
         '</div>'  , 
       ]  .  join  (  ''  )  ; 
     }  )  ; 
  
     var  wrapper  =  document .  createElement  (  'div'  )  ;   // 创建 一个  swiper-wrapper 

    wrapper . className  =   'swiper-wrapper'  ; 
    wrapper . innerHTML  =  html .  join  (  ''  )  ;   // 把所有 swiper-slide 塞进去 
  
     var  container  =  document .  createElement  (  'div'  )  ;   // 创建跟节点 
  
    container . className  =   'container'  ; 
  
     // 把所有 html 拼起来 
    container . innerHTML  =   [ 
       '<div class="count">'  , 
         '<span class="current">'   +   ( idx  ||   )   +   '</span>'  , 
         '/'  , 
         '<span class="total">'   +  list . length  +   '</span>'  , 
       '</div>'  , 
      wrapper . outerHTML , 
       '<div class="swiper-pagination"></div>'  , 
     ]  .  join  (  ''  )  ; 

     //  添加 到 DOM 中 
    document . body .  appendChild  ( container )  ; 

     // 实例化 一个  swiper 
     new   Swiper  ( container ,   { 
      zoom :   true  ,   // 缩放开启 
      loop :  list . length  >   ,   // 如果 图片 只有一张,则不开启循环 
      pagination :   {   //  分页 配置 
        el :   '.swiper-pagination'  , 
       }  , 
      on :   {   // 事件监听 
        paginationUpdate :   function  ( e )   {   // 当 分页 发生变化的时候 
           var  idx  =  e . realIndex ;   // 拿到当前页索引 

           // 赋值给 分页 计数器 
          container .  querySelector  (  '.current'  )  . innerText  =  idx  +   ; 
         }  , 
       }  , 
     }  )  .  slid eto   ( idx ,   )  ;   //  默 认展示初始图 
   } 
  
   previewImage  (  'https://img.mukewang.com/5ef94c8e000109e118720764.jpg'  ,   [ 
     'https://img.mukewang.com/5f057a6a0001f4f918720764.jpg'  , 
     'https://img.mukewang.com/5ef94c8e000109e118720764.jpg'  , 
     'https://img.mukewang.com/5ef15e4e00010b0018720764.jpg'  , 
     'https://img.mukewang.com/5f0561160001630718720764.jpg'  , 
   ]  )  ; 
      </ script  >    
   </ body  >  
   </ html  >  
 

@H_ 404 _6@源码没有跳着走的逻辑,都 加上 了注释,相对好理解。

@H_ 404 _6@这个 图片 查看 方法 利用了 swiper 提供的滚动、手势缩放、手势拖动、 分页 的能力,实现相对简单,如果需要自己去实现相应 功能 ,就需要花费大量的经历。

@H_ 404 _6@

3. 小结

@H_ 404 _6@swiper 本身的定位并不是轮播,轮播是其应用场景之一,发挥想象,可以用 swiper 做许多事情。

ECMAScript 6 ? ?moment

查看更多关于swiper的详细内容...

  阅读:36次

上一篇

下一篇

第1节:什么是 JavaScript    第2节:学习环境准备    第3节:调试方案    第4节:JavaScript 变量    第5节:JavaScript 数据类型    第6节:JavaScript if 语句    第7节:for 语句    第8节:JavaScript 算数运算符    第9节:JavaScript 比较运算符    第10节:JavaScript 逻辑运算符    第11节:JavaScript 函数    第12节:JavaScript 表达式    第13节:JavaScript 对象    第14节:JavaScript 字符串    第15节:JavaScript 数字    第16节:JavaScript 数组    第17节:JavaScript switch 语句    第18节:JavaScript while 语句    第19节:JavaScript 的 break 与 continue    第20节:JavaScript with    第21节:document.cookie    第22节:JavaScript Function    第23节:JavaScript Math    第24节:JavaScript Date    第25节:JavaScript RegExp    第26节:JavaScript JSON    第27节:什么是 DOM    第28节:DOM 和 JavaScript 的关系    第29节:获取和操作 DOM 节点    第30节:DOM 与事件    第31节:DOM 事件绑定    第32节:DOM 事件对象    第33节:DOM 事件流    第34节:事件相关的优化    第35节:自定义事件    第36节:表单校验    第37节:什么是 BOM    第38节:常用的 BOM 相关对象    第39节:BOM 常用属性和方法    第40节:AJAX    第41节:异常处理    第42节:三元运算符    第43节:逗号操作符    第44节:void    第45节:typeof    第46节:delete 操作符    第47节:debugger    第48节:getter & setter    第49节:new 运算符与构造函数    第50节:JavaScript 原型    第51节:JavaScript instanceof    第52节:JavaScript this    第53节:严格模式    第54节:作用域    第55节:闭包    第56节:变量提升    第57节:对象包装器    第58节:Lodash    第59节:moment    第60节:swiper    第61节:ECMAScript 6    第62节:Node.js    第63节:Babel    第64节:CSS 预处理器    第65节:代码规范    第66节:TypeScript    第67节:WebComponents    第68节:Vue、React、Angular    第69节:小程序    第70节:JavaScript 关键字    第71节:分号导致的问题    第72节:对象属性访问问题    第73节:this 使用问题    第74节:浮点数精度问题    第75节:独一无二的 NaN    第76节:避免全局污染    第77节:控制台观察对象问题    第78节:根据环境选择语言特性    第79节:相关资源