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 attachEvent传递参数的办法
Dec 14 Javascript
Js 随机数产生6位数字
May 13 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
May 08 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
Dec 16 Javascript
jQuery的DOM操作之删除节点示例
Jan 03 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
Apr 19 Javascript
Javascript字符串拼接小技巧(推荐)
Jun 02 Javascript
AngularJS表单详解及示例代码
Aug 17 Javascript
pc加载更多功能和移动端下拉刷新加载数据
Nov 07 Javascript
纯JS单页面赛车游戏制作代码分享
Mar 03 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
Dec 04 Javascript
解决node-sass偶尔安装失败的方法小结
Dec 05 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
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
PHP 实现重载
2021/03/09 PHP
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
Python logging模块学习笔记
2014/05/24 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
如何设置Java的运行环境
2013/04/05 面试题
车贷收入证明范本
2014/01/09 职场文书
九年级体育教学反思
2014/01/23 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
承诺保证书格式
2015/02/28 职场文书
立春观后感
2015/06/18 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers