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 相关文章推荐
IE中直接运行显示当前网页中的图片 推荐
Aug 31 Javascript
javascript英文日期(有时间)选择器
May 02 Javascript
jquery简单实现鼠标经过导航条改变背景图
Dec 17 Javascript
jQuery之字体大小的设置方法
Feb 27 Javascript
给应用部分的js代码设定一个统一的入口
Jun 15 Javascript
解决vue-cli中stylus无法使用的问题方法
Jun 19 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
May 05 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
Sep 23 Javascript
微信小程序canvas截取任意形状的实现代码
Jan 13 Javascript
Vue如何基于vue-i18n实现多国语言兼容
Jul 17 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
Aug 14 Javascript
OpenLayers3实现地图显示功能
Sep 25 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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
php实现天干地支计算器示例
2014/03/14 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
详解Python中expandtabs()方法的使用
2015/05/18 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
is_file和file_exists效率比较
2021/03/14 PHP
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
师范毕业生个人求职信
2013/12/09 职场文书
会计职业生涯规划范文
2014/01/04 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
用Python实现Newton插值法
2021/04/17 Python
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript