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 相关文章推荐
web网页按比例显示图片实现原理及js代码
Aug 09 Javascript
JavaScript的Module模式编程深入分析
Aug 13 Javascript
document.compatMode的CSS1compat使用介绍
Apr 03 Javascript
JS实现title标题栏文字不间断滚动显示效果
Sep 07 Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
Jan 16 Javascript
vue-cli webpack2项目打包优化分享
Feb 07 Javascript
React Native自定义控件底部抽屉菜单的示例
Feb 08 Javascript
vue定义全局变量和全局方法的方法示例
Aug 01 Javascript
javascript实现考勤日历功能
Nov 29 Javascript
不刷新网页就能链接新的js文件方法总结
Mar 01 Javascript
JS简易计算器实例讲解
Jun 30 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版银联支付接口开发简明教程
2016/10/14 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
django数据库migrate失败的解决方法解析
2018/02/08 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
python 调用钉钉机器人的方法
2019/02/20 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
ASP.NET Core中的配置详解
2021/02/05 Python
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
预备党员表决心书
2014/03/11 职场文书
小学开学典礼主持词
2014/03/19 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
党员服务承诺书
2014/05/28 职场文书
会计出纳岗位职责
2015/03/31 职场文书
盗窃案辩护词
2015/05/21 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
JavaScript实现优先级队列
2021/12/06 Javascript