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 相关文章推荐
JSON辅助格式化处理方法
Mar 26 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
Jun 25 Javascript
JavaScript 闭包机制详解及实例代码
Oct 10 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
Dec 18 Javascript
最基础的vue.js双向绑定操作
Aug 23 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
Oct 24 jQuery
Angular 5.x 学习笔记之Router(路由)应用
Apr 08 Javascript
VUE-cli3使用 svg-sprite-loader
Oct 20 Javascript
js实现随机数小游戏
Jun 28 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
Nov 09 Javascript
Vue 封装防刷新考试倒计时组件的实现
Jun 05 Javascript
用vue设计一个日历表
Dec 03 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程序61条面向对象分析设计的经验小结
2008/11/12 PHP
批量修改RAR文件注释的php代码
2010/11/20 PHP
dedecms中使用php语句指南
2014/11/13 PHP
PHP网络操作函数汇总
2015/05/18 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
python基础教程之lambda表达式使用方法
2014/02/12 Python
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Python实现求数列和的方法示例
2018/01/12 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
Python配置文件处理的方法教程
2019/08/29 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
简述python Scrapy框架
2020/08/17 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
维德科技C#面试题笔试题
2015/12/09 面试题
测试时代收集的软件测试面试题
2013/09/25 面试题
办公室主任主任岗位责任制
2014/02/11 职场文书
入党申请自荐书范文
2014/02/11 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
冬季施工防火方案
2014/05/17 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
优秀高中学生评语
2014/12/30 职场文书
研讨会通知
2015/04/27 职场文书
谢师宴学生致辞
2015/07/27 职场文书
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL