这篇文章主要介绍了Vue如何实现监听某个元素滚动的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue如何实现监听某个元素滚动文章都会有所收获,下面我们一起来看看吧。
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>
场景:当某个元素滚动到可视区时,为其添加动画样式(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元素滚动到可视区的时候,给他添加动画样式了。
关于“Vue如何实现监听某个元素滚动”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Vue如何实现监听某个元素滚动”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。