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+CSS 图片等比缩小并垂直居中实现代码
Dec 01 Javascript
用Juery网页选项卡实现代码
Jun 13 Javascript
IE6下focus与blur错乱的解决方案
Jul 31 Javascript
jquery网页元素拖拽插件效果及实现
Aug 05 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
Mar 04 Javascript
jQuery选择器源码解读(二):select方法
Mar 31 Javascript
Angularjs material 实现搜索框功能
Mar 08 Javascript
Node.js Streams文件读写操作详解
Jul 04 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
Nov 14 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
Jul 06 Javascript
如何将百度地图包装成Vue的组件的方法步骤
Feb 12 Javascript
jquery实现垂直手风琴菜单
Mar 04 jQuery
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
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
ThinkPHP php 框架学习笔记
2009/10/30 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
jQuery阻止同类型事件小结
2013/04/19 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
JavaScript 面向对象基础简单示例
2019/10/02 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
Python实现常见的回文字符串算法
2018/11/14 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
Python创建自己的加密货币的示例
2021/03/01 Python
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
班主任工作年限证明
2014/01/12 职场文书
学校七一活动方案
2014/01/19 职场文书
品牌服务方案
2014/06/03 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
Python基本知识点总结
2022/04/07 Python
HttpClient实现表单提交上传文件
2022/08/14 Java/Android