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 相关文章推荐
根据分辨率不同,调用不同的css文件
Aug 25 Javascript
jQuery中live方法的重复绑定说明
Oct 21 Javascript
JQuery AJAX 中文乱码问题解决
Jun 05 Javascript
js鼠标滑过图片震动特效的方法
Feb 17 Javascript
javascript原始值和对象引用实例分析
Apr 25 Javascript
jquery对复选框(checkbox)的操作汇总
Jan 13 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
Jan 09 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
Jun 18 Javascript
Vue 换肤的示例实践
Jan 23 Javascript
解决layui 三级联动下拉框更新时回显的问题
Sep 03 Javascript
layui禁用侧边导航栏点击事件的解决方法
Sep 25 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
Apr 20 Javascript
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相关资料
2006/10/09 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
javascript动态修改Li节点值的方法
2015/01/20 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
Python OS模块常用函数说明
2015/05/23 Python
Python文件的读写和异常代码示例
2017/10/31 Python
python队列Queue的详解
2019/05/10 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
python re模块和正则表达式
2021/03/24 Python
四则混合运算教学反思
2016/02/23 职场文书
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python