jQuery利用translate3d实现点击左右滑动效果核心代码

我们在用swiper做滑动幻灯片效果,当子元素内容比较多时,自定义分页内容会超出主体显示区域,我们想实现的效果是当我们点击到超出的那几个幻灯时,分页内容也会同步滑动,这种该怎么实现呢?

1、CSS部分,定义分页内容父元素pagination显示为flex效果并且位置相对定位,同时子元素swiper-pagination-bullet宽度不被压缩,让子元素显示在同一行,同时父元素和子元素还要被一层元素swiper-container包裹,并设置好宽度、超出内容隐藏

.swiper-container{max-width:420px;overflow: hidden}
.pagination{display: flex;display: -webkit-box;display: -webkit-flex;position:relative;}
.pagination .swiper-pagination-bullet{flex-shrink: 0;}

2、jQuery代码部分,核心利用translate3d实现滑动效果到当前点击部分,参数currentbullet为当前点击子元素,每次滑动里量leftVal=当前子元素距离父节点左边距离+当前元素宽度*2-父节点宽度,如果leftVal小于等于0,表示子元素没有超出,不滑动,否则开始滑动。当前元素宽度*2的意思是leftVal大于等于当前子元素宽度的时候就要开始滑动了,要不然点击最右边的时候不会滑动的。

function transformbullet (currentbullet){
  var leftVal =parseInt((currentbullet.position().left-currentbullet.parent().outerWidth()+currentbullet.outerWidth()).toFixed(2)),
  navLeftWidth = parseInt(currentbullet.parent().css('padding-left'));
  leftVal = leftVal + navLeftWidth;
  leftVal = leftVal + currentbullet.outerWidth();
  if (leftVal <= 0) {
    leftVal = 0
  }

  currentbullet.parent().css({ 'transform': 'translate3d(' + -leftVal + 'px, 0px, 0px)', 'transition-duration': '1000ms' });
}

演示地址:jQuery利用translate3d实现点击左右滑动效果核心代码实例展示

相关推荐