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 相关文章推荐
基于jQuery选择器的整理集合
Apr 26 Javascript
easyui datagrid 键盘上下控制选中行示例
Mar 31 Javascript
JS判断页面是否出现滚动条的方法
Jul 17 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
May 17 Javascript
JavaScript Promise 用法
Jun 14 Javascript
基于bootstrap实现收缩导航条
Mar 17 Javascript
使用JavaScript实现一个小程序之99乘法表
Sep 21 Javascript
js数据类型检测总结
Aug 05 Javascript
详解Vue的watch中的immediate与watch是什么意思
Dec 30 Javascript
JS出现404错误原理及解决方案
Jul 01 Javascript
详解React 条件渲染
Jul 08 Javascript
node.js如何根据URL返回指定的图片详解
Oct 21 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+mysql分页代码详解
2008/03/27 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
php通过session防url攻击方法
2014/12/10 PHP
PHP中串行化用法示例
2016/11/16 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
python读取excel表格生成erlang数据
2017/08/26 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
python sqlite的Row对象操作示例
2019/09/11 Python
python三引号如何输入
2020/07/06 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
比较基础的php面试题及答案-编程题
2012/10/14 面试题
绿色城市实施方案
2014/03/19 职场文书
住宅质量保证书
2014/04/29 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
花田少年史观后感
2015/06/16 职场文书
采购员工作总结范文
2015/08/12 职场文书
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle