Swiper实现导航栏滚动效果

 更新时间:2020年10月16日 09:55:25   作者:HAN_韩  
这篇文章主要为大家详细介绍了Swiper实现导航栏滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

在一些移动app中,总能看到导航栏是可以滚动,下列例子是在vant的官方文档中看到的,这样的滚动效果利用Swiper也可以实现,效果实现的思路是,根据当前点击的“标签”为起点,当前标签”的位置大于视口的一半时,让容器的位置偏移一定的位置,让当前点击的“标签”始终在视口的中间位置。

1、引入相关插件

<link rel="stylesheet" href="../css/swiper.css" >
<script src="http://www.jq22.com/jquery/jquery-1.7.1.js"></script>
<script src="../js/swiper.js"></script>

2、编写view(界面)

<div class="box">
 <div class="swiper-container">
 <div class="swiper-wrapper">
 <div class="swiper-slide">综合</div>
 <div class="swiper-slide">单曲</div>
 <div class="swiper-slide">视频</div>
 <div class="swiper-slide">歌手</div>
 <div class="swiper-slide">专辑</div>
 <div class="swiper-slide">歌单</div>
 <div class="swiper-slide">主播电台</div>
 <span></span>
 </div>
 </div>
</div>

3、编写style

*{
 margin: 0;
 padding: 0;
 }
 .box{
 width: 500px;
 height: 50px;
 border: 1px solid #000;
 margin: 100px auto;
 }
 .swiper-container{
 width: auto!important;
 height: 100%;
 text-align: center;
 line-height: 50px;
 color: #000;
 font-size: 20px;
 }
 .swiper-wrapper{
 position: relative;
 width: auto!important;
 height: 100%;
 }
 .swiper-slide {
 list-style: none;
 display: flex;
 justify-content: flex-start;
 flex-wrap: nowrap;
 cursor: pointer;
 }
 .swiper-wrapper span{
 position: absolute;
 height: 3px;
 background: #000;
 left: 1%;
 top: 85%;
 }
 .swiper-slide{
 width: auto!important;
 margin-right: 15px!important;
 padding: 0 18px;
 }

为了让每个swiper-slide的宽度由内容撑起,右边显示一半是提示用户这个导航栏是可以滚动的,所以在初始化时要设置swiper的slidesPerView为auto,slidesPerView: “auto”, 同时要在css设置swiper-slide的样式为:

 .swiper-slide{
 width: auto!important;
 margin-right: 15px!important;
 padding: 0 18px;
 }

这样swiper-slide的宽度就是由内容撑起了,而且可以自由的进行滚动了

4、编写js

$(function () {
 $(".swiper-wrapper span").css({width: $(".swiper-slide")[0].offsetWidth});
 let navScroll = new Swiper('.box .swiper-container', {
 freeMode:true,
 slidesPerView: "auto",
 freeModeMomentumRatio: 0.5,
 on:{
 //当前swiper-slide点击时触发事件
 click:function (e) {
  let thisWidth = this.clickedSlide.offsetWidth;
  let thisLeft = this.clickedSlide.offsetLeft;
  let offsetX = this.width / 2 - thisLeft - thisWidth / 2;
  //偏移量在1/2视口内时,容器不发生偏移
  if (offsetX > 0){
  offsetX = 0;
  }
  //offsetX小于容器最大偏移时,让偏移量等于容器最大的偏移量
  else if (offsetX < this.maxTranslate()){
  offsetX = this.maxTranslate();
  }
  //设置容器的过渡动画
  this.setTransition(300);
  this.setTranslate(offsetX);
  //滚动条位置和长度执行动画
  $(".swiper-wrapper span").animate({left: thisLeft, width: thisWidth},400);
 }
 }
 });
 })

最终效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • echart在微信小程序的使用简单示例

    echart在微信小程序的使用简单示例

    最近公司的项目中需要在小程序内使用echarts组件来展示数据,下面这篇文章主要给大家介绍了关于echart在微信小程序的使用方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • javascript正则表达式中分组详解

    javascript正则表达式中分组详解

    这篇文章主要介绍了javascript正则表达式中分组的相关资料,包括捕获性分组和非捕获性分组,需要的朋友可以参考下
    2016-07-07
  • 浅析JavaScript中的事件委托机制跟深浅拷贝

    浅析JavaScript中的事件委托机制跟深浅拷贝

    这篇文章主要介绍了JavaScript中的事件委托机制跟深浅拷贝,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 动态加载外部javascript文件的函数代码分享

    动态加载外部javascript文件的函数代码分享

    动态加载外部javascript文件的函数代码分享,做个记录备忘,方便查找。
    2011-07-07
  • JavaScript使用链式方法封装jQuery中CSS()方法示例

    JavaScript使用链式方法封装jQuery中CSS()方法示例

    这篇文章主要介绍了JavaScript使用链式方法封装jQuery中CSS()方法,结合具体实例形式分析了JS采用链式操作方法封住jQuery中连缀操作实现css()方法的相关技巧,需要的朋友可以参考下
    2017-04-04
  • JS使用window.requestAnimationFrame()实现逐帧动画

    JS使用window.requestAnimationFrame()实现逐帧动画

    这篇文章介绍了JS使用window.requestAnimationFrame()实现逐帧动画的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • javascript刷新父页面的各种方法汇总

    javascript刷新父页面的各种方法汇总

    这篇文章主要对javascript刷新父页面的各种方法做下汇总,需要的朋友可以参考下
    2014-09-09
  • JSON.stringify的多种用法总结

    JSON.stringify的多种用法总结

    这篇文章主要给大家介绍了关于JSON.stringify使用的相关资料, JSON.stringify()方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,需要的朋友可以参考下
    2021-06-06
  • JavaScript数据类型转换简单方法举例

    JavaScript数据类型转换简单方法举例

    JavaScript是一种无类型语言,但同时JavaScript提供了一种灵活的自动类型转换的处理方式,下面这篇文章主要给大家介绍了关于JavaScript数据类型转换的相关资料,需要的朋友可以参考下
    2023-12-12
  • JavaScript内存泄漏的处理方式

    JavaScript内存泄漏的处理方式

    这篇文章主要介绍了JavaScript内存泄漏的处理方式,通过理论和实例结合的方式让你理解的更加透彻。
    2017-11-11

最新评论