真知棒、
侠客
侠客
  • 最后登录2020-12-01
  • 发帖数31
  • 社区居民
阅读:241回复:3

swiper.slideTo() 与 swiper-pagination 搭配使用

楼主#
更多 发布于:2020-11-11 14:20
 期望实现效果是用swiper实现与楼梯相似的效果,不同的是用swiper做翻页的...

在一开始写的时候想的是自己写一个列表替换掉swiper的分页器效果...,最终还是实现了!

话不多说,看问题

首先引入依赖配置(我引入的是自己的路径)

<link rel="stylesheet" href="./Swiper-3.4.2/dist/css/swiper.min.css" />   
 <script src="./jquery.min.js"></script>
<script src="./Swiper-3.4.2/dist/js/swiper.min.js"></script>


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 class="swiper-slide">Slide 4</div>
    <div class="swiper-slide">Slide 5</div>
    <div class="swiper-slide">Slide 6</div>
    <div class="swiper-slide">Slide 7</div>
    <div class="swiper-slide">Slide 8</div>
    <div class="swiper-slide">Slide 9</div>
    <div class="swiper-slide">Slide 10</div>
  </div>
</div>
<ul class="list">
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
  <li>7</li>
  <li>8</li>
  <li>9</li>
  <li>10</li>
  </li>
</ul>

CSS没写(做参考)


<style>
      html,
      body {
        position: relative;
        height: 500px;
      }
      body {
        background: #eee;
        font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
        font-size: 14px;
        color: #000;
        margin: 0;
        padding: 0;
      }
      .swiper-container {
        width: 100%;
        height: 500px;
      }
      .swiper-slide {
        font-size: 18px;
        background: #fff;
      }
</style>

JS

var swiper = new Swiper('.swiper-container', {
        pagination: '.swiper-pagination',
        // slidesPerView: 3,   //  当前页展示几个slide页面
        paginationClickable: true,
        spaceBetween: 30,  //  slide之间的间距
        initialSlide: 0, // 坐标索引值初始是第几个
        onTransitionEnd: function (swiper) {
          //  回调函数,过渡结束时触发,接收Swiper实例作为参数。
          console.info('页面跳转到第:', swiper.activeIndex, ' 页') //  获取当前swiper页面的索引值  
        },
      })


var lis = $('ul>li')
$.each(lis,function (index, element) {
    $(element).click(function () {
         console.log(index)          
         var swiperIndex = swiper.activeIndex // 定义swiper.activeIndex          
         swiperIndex = index //  使按钮索引值与swiper的索引值相等          
         index = swiper.slideTo(swiperIndex, 1000, false) // swiper.slideTo   按钮的索引值是多少,swiper的索引值就跳到多少      
})      
   })




此时会想挺好,实现了!!!

但是,你可能没想到的是当你多次点击这个列表进行slide切换的时候,这时候问题出来了


true与false是怎么回事!!!
经过查阅swiper函数同一个事件经过多次连续触发会失效。


经过查看文档得知有 paginationType:'custom'; 得知这个属性。


整理后


首先在HTML中申明出分页器

<div class="swiper-pagination"></div>

HTML代码

   <!-- Swiper -->
   <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 class="swiper-slide">Slide 4</div>
        <div class="swiper-slide">Slide 5</div>
        <div class="swiper-slide">Slide 6</div>
        <div class="swiper-slide">Slide 7</div>
        <div class="swiper-slide">Slide 8</div>
        <div class="swiper-slide">Slide 9</div>
        <div class="swiper-slide">Slide 10</div>
      </div>
      <!-- Add Pagination -->
      <div class="swiper-pagination"></div>
    </div>
    <button class="btn">按钮</button>



CSS(可忽略不计样式)

  
<style>
      html,
      body {
        position: relative;
        height: 100%;
      }
      body {
        background: #eee;
        font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
        font-size: 14px;
        color: #000;
        margin: 0;
        padding: 0;
      }
      .swiper-container {
        width: 100%;
        height: 500px;
      }
      .swiper-slide {
        text-align: center;
        font-size: 18px;
        background: #fff;
      }
      ul,
      li {
        list-style: none;
      }
      .swiper-pagination-custom {
        color: skyblue;
      }
      .swiper-pagination-custom.active {
        color: coral;
      }
    </style>


JS

<script>      
    var mySwiper = new Swiper('.swiper-container', {
        pagination: '.swiper-pagination', //  分页容器的css选择器        
        paginationType: 'custom', //   自定义-分页器样式类型(前提)
       //设置自定义分页器的内容      
        paginationCustomRender: function (swiper, current, total) {  
                                                                           // current (paginationCurrentClass) 分页器的当前索引的类名
          var _html = ''                                              // total   (paginationTotalClass)  分页器总数的类名          
          var t = ''
          for (var i = 1; i <= total; i++) {          
               if (i == 1) {
                  t = '第 1 页'          
                } else if (i == 2) {
                  t = '第 2 页'
                } else if (i == 3) {
                  t = '第 3 页'
                } else if (i == 4) {
                  t = '第 4 页'  
                } else if (i == 5) {
                  t = '第 5 页'  
                } else if (i == 6) {
                  t = '第 6 页'  
                } else if (i == 7) {
                  t = '第 7 页'
                } else if (i == 8) {
                  t = '第 8 页'
                } else if (i == 9) {
                  t = '第 9 页'
                } else if (i == 10) {
                  t = '第 1 页0'
                }

            if (current == i) {
                 _html +=
                  '<li class="swiper-pagination-custom active">' + t + '</li>'
             } else {
                 _html += '<li class="swiper-pagination-custom">' + t + '</li>'  
             }
          }      
       return _html //返回所有的页码html
        },  
    })

      //给每个页码绑定跳转的事件      
    $('.swiper-pagination').on('click', 'li', function () {
        var index = $(this).index()
         mySwiper.slideTo(index, 500, false) //切换到第一个slide,速度为1秒
        console.log(index)
      })

      // 返回第一个slide
      $('.btn').on('click', function () {
        mySwiper.slideTo(0, 500, false)
     })
    </script>


此时那种不友好的情况消失了
[真知棒、于2020-11-16 09:48编辑了帖子]

最新喜欢:

doubleyongdouble...
真知棒、
侠客
侠客
  • 最后登录2020-12-01
  • 发帖数31
  • 社区居民
沙发#
发布于:2020-11-11 16:36
还可以用jquery来实现


HTML


<body>  <div id="wra">
    <div id="div1">div1</div>    <div id="div2">div2</div>
    <div id="div3">div3</div>    <div id="div4">div4</div>
  </div>  <div id="wrap">
    <div >1</div>    <div >2</div>
    <div >3</div>  </div>
</body>

CSS(请忽略难看的样式)

    html,body{
      width: 100%;
      height: 100%;
    }
    #wra{
      width: 100%;
      height: 100%;
    }
    #wra div{
      width: 100%;
      height: 100%;
      text-align: center;
      font-size: 100px;
      line-height:726px;
    }
    #wra #div1{
      background: #ccc;
    }
    #wra #div2{
      background: #aaa;
    }
    #wra #div3{
      background: #eee;
    }
    #wrap{
      width: 100px;
      height: 300px;
      position: fixed;
      right: 200px;
      top: 300px;
      background: oldlace;
      
    }
    #wrap div{
      width:100px ;
      height: 100px;
      text-align: center;
      line-height: 100px;
    }


JS


  $(function(){    $('#wrap div').click(function(){
      $(document).scrollTop($('#wra').children().eq($(this).index()).offset().top);    })
  })
真知棒、
侠客
侠客
  • 最后登录2020-12-01
  • 发帖数31
  • 社区居民
板凳#
发布于:2020-11-11 16:26
doubleyong:楼主,效果图没有呢,看不到回到原帖
我重新上传了,还是不行
或者阳姐可以copy代码试一下
doubleyong
管理员
管理员
  • 最后登录2020-12-03
  • 发帖数938
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
地板#
发布于:2020-11-11 14:23
楼主,效果图没有呢,看不到
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号