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 相关文章推荐
JavaScript 事件的一些重要说明
Oct 25 Javascript
深入理解JavaScript编程中的同步与异步机制
Jun 24 Javascript
学习javascript的闭包,原型,和匿名函数之旅
Oct 18 Javascript
Javascript基础回顾之(三) js面向对象
Jan 31 Javascript
JS常见算法详解
Feb 28 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 Javascript
Taro集成Redux快速上手的方法示例
Jun 21 Javascript
element-ui的回调函数Events的用法详解
Oct 16 Javascript
vue.js层叠轮播效果的实例代码
Nov 08 Javascript
原生js实现针对Dom节点的CRUD操作示例
Aug 26 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
Dec 30 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
Jul 20 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从FLV文件获取视频预览图的方法
2015/03/12 PHP
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
2011/05/24 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
iview table render集成switch开关的实例
2018/03/14 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
python操作 hbase 数据的方法
2016/12/18 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
python3中zip()函数使用详解
2018/06/29 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
大专生工程监理求职信
2013/10/04 职场文书
工商学院毕业生自荐信
2013/11/12 职场文书
新闻学专业个人求职信写作
2014/02/04 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
企业务虚会发言材料
2014/10/20 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang