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中xml操作实现代码
Nov 21 Javascript
你必须知道的JavaScript 变量命名规则详解
May 07 Javascript
javascript控制在光标位置插入文字适合表情的插入
Jun 09 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
Oct 23 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
Aug 06 Javascript
js实现商品抛物线加入购物车特效
Nov 18 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
May 26 Javascript
JS实现的数组去除重复数据算法小结
Nov 17 Javascript
详解bootstrap导航栏.nav与.navbar区别
Nov 23 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
Jan 23 Javascript
JS实现的tab切换并显示相应内容模块功能示例
Aug 03 Javascript
微信小程序利用云函数获取手机号码
Dec 17 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中explode与split的区别介绍
2012/10/03 PHP
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
用jscript启动sqlserver
2007/06/21 Javascript
JavaScript中的History历史对象
2008/01/16 Javascript
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
基于python时间处理方法(详解)
2017/08/14 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
使用python制作一个解压缩软件
2019/11/13 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
Django ORM filter() 的运用详解
2020/05/14 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
计算机专业职业规划
2014/02/28 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
追讨欠款律师函
2015/05/27 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers