VUE 实现滚动监听 导航栏置顶的方法


Posted in Javascript onSeptember 11, 2018

HTML

非重点的代码,比如样式啥的,我就不放上来了,一笔带过

简略的写一下html代码,可以对照文章最后的效果图看,应该不难理解

<div :style="{ paddingBottom: paddingBottom}">

 <header>资源信息</header>

 <div>
  <!-- 公司信息 浏览量 -->
 </div>

 <div id="fixedBar" :class="{ fixedBar: isFixed }">
  <!-- 品名 -->
  <!-- 规格 -->
  <!-- 产地 -->
  <!-- 单价 -->
 </div>

 <div :style="{ marginTop: marginTop }">
  <!-- 数据列表 -->
 </div>

 <footer class="footer">
  <button>订阅</button>
  <button>关闭</button>
  <div v-show="advertShow">
   <a @click="del">×</a>
   <img src="./广告.jpg" />
  </div>
 </footer>

</div>

<style>
 .fixedBar {
  position: fixed;
  top: 0;
  z-index: 999;
  width: 100%;
 }
</style>

VUE

1. data ()

data () {
 paddingBottom: '1.5rem', // 给最外层div一个padding-bottom
 // 因为footer是fixed定位 如果padding-bottom为0 数据列表拉到最下面的时候 会有部分数据被footer挡住

 isFixed: false, // bar浮动
 offsetTop: 0, // 触发bar浮动的阈值
 marginTop: 0, // 触发bar浮动的同时 给数据列表一个margin-top 防止列表突然上移 会很突兀

 advertShow: true, // 广告显示
}

2. mounted ()

mounted () {
 // 设置初始的 padding-bottom 值为 footer 的高度 +20 防止数据列表拉到最下面被footer挡住 +多少自定
 this.paddingBottom = document.querySelector('.footer').offsetHeight + 20 + 'px';

 // 设置bar浮动阈值为 #fixedBar 至页面顶部的距离
 this.offsetTop = document.querySelector('#fixedBar').offsetTop;

 // 开启滚动监听
 window.addEventListener('scroll', this.handleScroll);
}

3. methods

methods: {
 // 关闭广告
 del () {
  this.advertShow = true;
  this.$nextTick(() => {
   this.paddingBottom = document.querySelector('.footer').offsetHeight + 20 + 'px';
  });
 },

 // 滚动监听 滚动触发的效果写在这里
 handleScroll () {
  var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;

  if (scrollTop >= this.offsetTop) {
   this.isFixed = true;
   this.marginTop = document.querySelector('#fixedBar').offsetHeight + 'px';
  } else {
   this.isFixed = false;
   this.marginTop = 0;
  }
 }
}

4. destroyed ()

destroyed () {
 window.removeEventListener('scroll', this.handleScroll); // 离开页面 关闭监听 不然会报错
}

效果图

VUE 实现滚动监听 导航栏置顶的方法

VUE 实现滚动监听 导航栏置顶的方法

VUE 实现滚动监听 导航栏置顶的方法

VUE 实现滚动监听 导航栏置顶的方法

以上这篇VUE 实现滚动监听 导航栏置顶的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
指定js可访问其它域名的cookie的方法
Sep 18 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
Jan 07 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
Jul 04 Javascript
完美解决AJAX跨域问题
Nov 01 Javascript
使用script的src实现跨域和类似ajax效果
Nov 10 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
Feb 26 Javascript
打字效果动画的4种实现方法(超简单)
Oct 18 Javascript
p5.js实现斐波那契螺旋的示例代码
Mar 22 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
Aug 24 Javascript
基于javascript的拖拽类封装详解
Apr 19 Javascript
浅析我对JS延迟异步脚本的思考
Oct 12 Javascript
vue中的watch监听数据变化及watch中各属性的详解
Sep 11 #Javascript
vue axios数据请求get、post方法及实例详解
Sep 11 #Javascript
js监听html页面的上下滚动事件方法
Sep 11 #Javascript
vue 使用html2canvas将DOM转化为图片的方法
Sep 11 #Javascript
Vue项目数据动态过滤实践及实现思路
Sep 11 #Javascript
使用vue.js在页面内组件监听scroll事件的方法
Sep 11 #Javascript
vue+axios+element ui 实现全局loading加载示例
Sep 11 #Javascript
You might like
PHP里的中文变量说明
2011/07/23 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
php 中的4种标记风格介绍
2012/05/10 PHP
php替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
web 页面分页打印的实现
2009/06/22 Javascript
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
Python OpenCV实现视频分帧
2019/06/01 Python
python中dict()的高级用法实现
2019/11/13 Python
python爬虫之遍历单个域名
2019/11/20 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
婚礼新郎父母答谢词
2014/01/16 职场文书
新年晚会主持词
2014/03/24 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
高三数学教学反思
2016/02/18 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
Python turtle编写简单的球类小游戏
2022/03/31 Python
python单向链表实例详解
2022/05/25 Python