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 页面输出值
Nov 30 Javascript
javascript Array.remove() 数组删除
Aug 06 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
Mar 15 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
May 09 Javascript
javascript正则表达式中分组详解
Jul 17 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
Dec 22 Javascript
JS常用正则表达式总结【经典】
May 12 Javascript
基于 webpack2 实现的多入口项目脚手架详解
Jun 26 Javascript
vue中的计算属性的使用和vue实例的方法示例
Dec 04 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
Sep 04 Javascript
如何解决webpack-dev-server代理常切换问题
Jan 09 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
Apr 08 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程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
PHP学习之PHP表达式
2006/10/09 PHP
php session应用实例 登录验证
2009/03/16 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
在PHP中使用redis
2013/11/04 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
2015/11/21 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
Python 错误和异常小结
2013/10/09 Python
在Python的Django框架中编写错误提示页面
2015/07/22 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
python实现人机猜拳小游戏
2020/02/03 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
德国购买踏板车网站:Microscooter
2019/10/14 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
个人租房协议书
2014/04/09 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
初二物理教学反思
2016/02/19 职场文书
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL