事件监听 & 页面滚动(页面滚动到某一位置时显示/隐藏某元素,Vue环境)

简介: 事件监听 & 页面滚动(页面滚动到某一位置时显示/隐藏某元素,Vue环境)

一、效果展示

       最近在做项目时有一个网页渲染是这样的,某一个元素在开始不显示,只有当页面滑动到指定的位置时才显示该元素。效果如下:

1.gif



二、实现步骤

1. 创建元素并设置为固定定位。


2. 首先使用 Vue 中的显示隐藏指令 v-show 将需要操作的元素隐藏;

image.png


3. methods 中创建监听窗口滚动方法,通过判断元素最顶端与页面最顶端的距离决定是否显示;


//监听窗口滚动
windowScrollListener() {
  //获取操作元素最顶端到页面顶端的垂直距离
  var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
  if (scrollTop >= 480) {
    this.isVisable = true; //大于480时显示元素
  }
  if (scrollTop < 480) {
    this.isVisable = false; //小于480时隐藏元素
  }
}

4. 创建阶段 created 中绑定监听事件进行监听;

created() {
   //添加滚动监听事件
   //在窗口滚动时调用监听窗口滚动方法
   window.addEventListener('scroll', this.windowScrollListener);
},

5. 销毁阶段 destory 中删除监听事件,离开页面时删除,以保证它不会影响其他页。

destroyed() {
   //离开页面时删除该监听
   window.removeEventListener('scroll', this.windowScrollListener)
}

三、涉及要点

1. Vue 语法 v-show

<元素 v-show="true/false">

       专门控制一个元素显示隐藏的特殊指令,用程序控制一个元素的显示或隐藏时。当 new Vue() 扫描到 v-show,就会先计算 = 右边的判断条件的值,如果 = 右边的判断条件值为 true,则当前元素默认正常显示,如果=右边的判断条件值为 false,则 v-show 自动被翻译为 display:none,当前元素隐藏且不占位。


2. 获取窗口到元素顶端的距离

       首先需要获取页面滚动的垂直距离。第一步就是获取浏览器的可视区域(在浏览器中能看到页面的区域)。


(1)先使用 document.documentElement 获取页面;


这里需要注意:


在没有声明 DOCTYPE 的 IE 浏览器中,浏览器显示窗口大小只能以下获取:

document.body.offsetWidth
document.body.offsetHeight

在声明了 DOCTYPE 的浏览器中,可以用以下来获取浏览器显示窗口大小:

document.documentElement.clientWidth
document.documentElement.clientHeight

所以为了所有浏览器都能适应,我们可以两者连用:


var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;

(2)使用属性 scrollTop 获取位于对象最顶端和窗口中可见内容的最顶端之间的距离,也就是我们所要的操作的 div 最顶端到页面最顶端的距离。


3. 监听事件

添加监听事件:addEventListener();移除监听事件:removeEventListener();语法如下:

element.addEventListener(event, function, useCapture);

第一个参数为事件类型;

第二个参数为事件发生时调用的函数;

第三个参数指定是使用事件冒泡还是事件捕获,此参数可选。

如我们的代码,监听到窗口滚动时调用 methods 中的判断方法。


window.addEventListener('scroll', this.windowScrollListener);
相关文章
|
23天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
25天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
26天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
31 1
vue学习第一章
|
23天前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
21 1
|
23天前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
27 1
|
23天前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
23天前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
26天前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
24 1
vue学习第三章
|
26天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
35 1
vue学习第四章
|
26天前
|
JavaScript 前端开发 算法
vue学习第7章(循环)
欢迎来到瑞雨溪的博客,一名热爱JavaScript和Vue的大一学生。本文介绍了Vue中的v-for指令,包括遍历数组和对象、使用key以及数组的响应式方法等内容,并附有综合练习实例。关注我,将持续更新更多优质文章!🎉🎉🎉
23 1
vue学习第7章(循环)