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 表单中textarea字数限制实现代码
Dec 07 Javascript
JS检测图片大小的实例
Aug 21 Javascript
javascript抖动元素的小例子
Oct 28 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
May 06 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
May 11 Javascript
js实现文本框宽度自适应文本宽度的方法
Aug 13 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
Nov 19 Javascript
jQuery+css实现的切换图片功能代码
Jan 27 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
node+experss实现爬取电影天堂爬虫
Nov 20 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
Sep 07 Javascript
微信小程序自定义顶部组件customHeader的示例代码
Jun 03 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/11/10 PHP
php中定时计划任务的实现原理
2013/01/08 PHP
PHP实现显示照片exif信息的方法
2014/07/11 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
一个很简单的办法实现TD的加亮效果.
2006/06/29 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
python调用windows api锁定计算机示例
2014/04/17 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
介绍一下linux的文件系统
2015/10/06 面试题
How to spawning asynchronous work in J2EE
2016/08/29 面试题
车辆工程专业求职信
2014/06/14 职场文书
八年级英语教学反思
2016/02/15 职场文书