Swiper实现导航栏滚动效果


Posted in Javascript onOctober 16, 2020

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

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实现导航栏滚动效果

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

Swiper实现导航栏滚动效果

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);
 }
 }
 });
 })

最终效果

Swiper实现导航栏滚动效果

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

Javascript 相关文章推荐
javascript设计模式之工厂模式示例讲解
Mar 04 Javascript
Node.js中调用mysql存储过程示例
Dec 20 Javascript
jQuery中get()方法用法实例
Dec 27 Javascript
JavaScript中的console.log()函数详细介绍
Dec 29 Javascript
JavaScript 变量、作用域及内存
Apr 08 Javascript
浅谈JavaScript字符串与数组
Jun 03 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
Aug 21 Javascript
JS表单验证的代码(常用)
Apr 08 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
Aug 08 jQuery
小程序图片剪裁加旋转的示例代码
Jul 10 Javascript
手淘flexible.js框架使用和源代码讲解小结
Oct 15 Javascript
如何使用vue3打造一个物料库
May 08 Vue.js
node.js通过url读取文件
Oct 16 #Javascript
vue组件实现移动端九宫格转盘抽奖
Oct 16 #Javascript
Vue3.0的优化总结
Oct 16 #Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 #Javascript
利用js实现简易红绿灯
Oct 15 #Javascript
关于Node.js中频繁修改代码重启服务器的问题
Oct 15 #Javascript
JS如何操作DOM基于表格动态展示数据
Oct 15 #Javascript
You might like
php中大括号作用介绍
2012/03/22 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
Div自动滚动到末尾的代码
2008/10/26 Javascript
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
python获取标准北京时间的方法
2015/03/24 Python
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
见习期自我鉴定
2013/11/07 职场文书
中文系学生自荐信范文
2013/11/13 职场文书
开业庆典邀请函
2014/01/08 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
搞笑创意广告语
2014/03/17 职场文书
机电系毕业生求职信
2014/07/11 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
证婚人致辞精选
2015/07/28 职场文书
技术入股合作协议书
2016/03/21 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android