Vue实现监听某个元素滚动,亲测有效

目录

监听某个元素滚动,亲测有效

监听dom元素滚动到了可视区?

监听某个元素滚动,亲测有效

Vue 开发,有时候只需要监听某个元素是否滚动就行了,不需要去监听整个页面。

Vue 有自带的 @scroll 但是并没有什么用,给某个滚动元素加上,滚动该元素并不会调用,加上 CSS 支持滚动样式也一样。

怎么监听呢?通过 addEventListener 与 @mousewheel 配合实现

addEventListener: 增加的是拖拽滚动条也能监听到滚动

@mousewheel:添加的是非拖拽滚动条滚动,比如在元素上鼠标或者触摸板滚动。

<template>   <!-- 滚动视图 -->   <div class="scrollview" ref="scrollview" @mousewheel="scrollChange">     <!-- 内容区域 -->     <div class="content"></div>   </div> </template> <script> export default {   mounted () {     // 获取指定元素     const scrollview = this.$refs['scrollview']     // 添加滚动监听,该滚动监听了拖拽滚动条     // 尾部的 true 最好加上,我这边测试没加 true ,拖拽滚动条无法监听到滚动,加上则可以监听到拖拽滚动条滚动回调     scrollview.addEventListener('scroll', this.scrollChange, true)   },   // beforeDestroy 与 destroyed 里面移除都行   beforeDestroy () {     // 获取指定元素     const scrollview = this.$refs['scrollview']     // 移除监听     scrollview.removeEventListener('scroll', this.scrollChange, true)   },   methods: {     // 滚动监听     scrollChange () {       console.log('滚动中')     }   } } </script> <style scoped> .scrollview {   height: 100px;   overflow-y: auto;   background-color: yellow; } .content {   height: 500px;   background-color: red; } </style>

案例效果

监听dom元素滚动到了可视区?

场景:当某个元素滚动到可视区时,为其添加动画样式(animate.css)。

common/utils.js

export const isElementNotInViewport = function(el) {     if (el) {         let rect = el.getBoundingClientRect();         return (             rect.top >=                 (window.innerHeight || document.documentElement.clientHeight) ||             rect.bottom <= 0         );     } };

在组件内的使用

import { isElementNotInViewport } from "common/utils"; export default {    ...   data() {     return {       header_Animate: false     }   },   mounted() {     // 监听滚动事件     window.addEventListener("scroll", this.scrollToTop);   },   beforeRouteLeave(to, form, next) {     // 离开路由移除滚动事件     window.removeEventListener('scroll',this.scrollToTop);     next();   },   methods: {     // 滚动事件     scrollToTop() {       !isElementNotInViewport(this.$refs.header) ? this.header_Animate = true: '';     }   } } <template>   <div      ref="header"      class="animate__animated"      :class="{animate__slideInLeft:header_Animate}">   </div> </template>

这样就可以控制当dom元素滚动到可视区的时候,给他添加动画样式了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易知道(ezd.cc)。

推荐阅读

    vue项目一些常见问题

    vue项目一些常见问题,组件,样式,**样式污染问题**同样的样式不需要在每个组件都复制组件内单独的样式加外层class包裹。加scope。否则只是

    01-Vue项目实战-网易云音乐-准备工作

    01-Vue项目实战-网易云音乐-准备工作,网易,项目,前言在接下来的一段时间,我会仿照网易云音乐,利用Vue开发一个移动端的网易云音乐项目。在做

    01- 第一天 spring boot2.3.1 +vue3.0 后台管理系统的研发

    01- 第一天 spring boot2.3.1 +vue3.0 后台管理系统的研发,自己的,后台,后台框架一直想开发一套完全属于自己的后台,但是18年的时候,曾经答

    Vue项目中 App.vue文件

    Vue项目中 App.vue文件,文件,内容, 在App.vue文件中,定义了一个id为app的div,在这个div板块中放置Helloworld组件,文件内容如下图所示:在

    1-Vue构造函数的生成

    1-Vue构造函数的生成,函数,属性,版本:@2.6.10环境:web ;思维图:www.processon.com/view/link/5…我们使用的Vue是一个经过层层加强的构造函数

    Win10监听用户隐私:根本停不下来

    Win10监听用户隐私:根本停不下来,隐私,根本,Windows 10发布后在受到赞誉的同时,关于收集隐私的问题仍引起争议。前不久我们专门给出了阻断教

    vue的跨域是什么意思

    vue的跨域是什么意思,跨域,浏览器,代理,请求,服务器,同源策略,在vue中,跨域是指浏览器不能执行其他网站的脚本;它是浏览器同源策略造成的,是浏览器

    Vue中如何实现表单验证

    Vue中如何实现表单验证,验证,表单验证,表单,用户名,元素,指令,随着web应用的不断发展,表单验证逐渐成为web开发过程中不可或缺的一部分。在Vue中

    用vue框架有什么好处

    用vue框架有什么好处,组件,项目,数据,优化,操作,框架,用vue的好处:1、Vue是组件化开发,减少代码的书写,使代码易于理解;2、可以对数据进行双向绑定;3

    Vue中的路由懒加载

    Vue中的路由懒加载,组件,路由,应用程序,懒加载,导入,函数,随着Web应用程序的复杂性不断增加,前端框架和库的使用也越来越广泛。Vue是一种流行的J

    vue路由模式有哪些

    vue路由模式有哪些,模式,浏览器,路由,请求,刷新,服务器,vue路由模式有:1、hash模式,使用URL的hash值来作为路由,支持所有浏览器;其url路径会出现“#