vue如何监听页面的滚动的开始和结束

目录
  • 监听页面的滚动的开始和结束
  • vue监听页面滚动事件
    • 方法:监听滚动实现
    • 问题:监听不到页面的滚动

监听页面的滚动的开始和结束

export default {
        data() {
            return {
                oldScrollTop: 0, //记录上一次滚动结束后的滚动距离
                scrollTop: 0 // 记录当前的滚动距离
            }
        },
        watch: {
            scrollTop(newValue, oldValue) {
                setTimeout(() => {
                    if(newValue == window.scrollY) { //延时执行后当newValue等于window.scrollY,代表滚动结束
                        console.log('滚动结束');
                        this.oldScrollTop = newValue; //每次滚动结束后都要给oldScrollTop赋值
                    };
                }, 20); //必须使用延时器,否则每次newValue和window.scrollY都相等,无法判断,20ms刚好大于watch的侦听周期,故延时20ms
                if(this.oldScrollTop == oldValue) { //每次滚动开始时oldScrollTop与oldValue相等
                    console.log('滚动开始');
                }
            }
        },
        methods: {
            handleScroll() {
                window.addEventListener('scroll', () => {
                    this.scrollTop = window.scrollY;
                })
            }
        },
        mounted() {
            this.handleScroll();
        },
        beforeDestroy() {
            window.removeEventListener('scroll'); //离开当前组件别忘记移除事件监听哦
        }
    }

vue监听页面滚动事件

方法:监听滚动实现

通过addEventListener方式监听

通过scroll获取到滚动

export default {
    data () {
        return {
            topNavBg: {
                backgroundColor: ''
              }
        }
    },
    // 滚动监听
    mounted () {
        window.addEventListener('scroll', this.handleScroll) // 监听页面滚动
    },
    methods: {
        // 获取页面滚动距离
        handleScroll () {
            let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
            console.log(scrollTop, '滚动距离')
        }
    },
    // 滚动重置
        beforeDestroy () {
              window.removeEventListener('scroll', this.handleScroll)
        },
}

问题:监听不到页面的滚动

现象:上述方法不可用,handleScroll只触发一次,且scrollTop为0

原因:html,body的height设置有问题,因为限制了根元素高度,故而无法监听到滚动

// oldCode: 原代码css中
body,html {
  width: 100%;
  height: 100vh; /或者 height: 100%
}
// newCode:新代码改为
body,html {
  width: 100%;
  min-height: 100vh; /或者 min-height: 100% ; 不需要也可以去除
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue实现某元素吸顶或固定位置显示(监听滚动事件)

    最近写了一个VUE的web app项目,需要实现某个部位吸顶的效果.即,页面往上滑动,刚好到达该部位时,该部分,固定在顶部显示. 1.监听滚动事件 利用VUE写一个在控制台打印当前的scrollTop, 首先,在mounted钩子中给window添加一个滚动滚动监听事件, mounted () { window.addEventListener('scroll', this.handleScroll) }, 然后在方法中,添加这个handleScroll方法 handleScroll () {

  • vue实现锚点跳转及滚动监听的方法

    vue中实现锚点跳转以及滚动监听跳转到相应标签的方法,供大家参考,具体内容如下 *注意·如果scroll-item的最后一个元素高度必须大于等于滚动区域的高度,不然最后一个元素就滚动不上去, scrollIntoView接口的具体参数说明 实际效果图 代码结构 // Html结构 <template>   <div>     <div class="list">       <ul>         <li v-for="

  • vue监听页面滚动到某个高度触发事件流程

    目录 监听页面滚动到某个高度触发事件 动态监听页面滚动高度 监听页面滚动到某个高度触发事件 methods: {    showIcon() {       if (         !!document.documentElement.scrollTop &&         document.documentElement.scrollTop > 200        ) {                         页面高度大于200执行操作         } else

  • vue监听页面中的某个div的滚动事件,并判断滚动的位置

    在开发中常常会遇到这样一个vue页面,页面分为左右两部分,左边是目录树,右边是一个类名为xq-box的div,在xq-box中多个div上下并列布局,每个div中的内容就对应着左边目录树中的相应节点,现在的目标是,要监听这个xq-box滚动事件,右边一旦开始滚动,就要知道滚动到哪个子div,并让左边的目录树中对应的节点高亮显示.要怎么做呢? 1.首先,先写好大概的页面布局,这里要注意,右边xq-box的子div要绑定"'xqItem'+序号"的id,为了下面用js能获取到匹配的dom元

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

    目录 监听某个元素滚动,亲测有效 监听dom元素滚动到了可视区? 监听某个元素滚动,亲测有效 Vue 开发,有时候只需要监听某个元素是否滚动就行了,不需要去监听整个页面. Vue 有自带的 @scroll 但是并没有什么用,给某个滚动元素加上,滚动该元素并不会调用,加上 CSS 支持滚动样式也一样. 怎么监听呢?通过 addEventListener 与 @mousewheel 配合实现 addEventListener: 增加的是拖拽滚动条也能监听到滚动 @mousewheel:添加的是非拖拽

  • vue如何监听页面的滚动的开始和结束

    目录 监听页面的滚动的开始和结束 vue监听页面滚动事件 方法:监听滚动实现 问题:监听不到页面的滚动 监听页面的滚动的开始和结束 export default { data() { return { oldScrollTop: 0, //记录上一次滚动结束后的滚动距离 scrollTop: 0 // 记录当前的滚动距离 } }, watch: { scrollTop(newValue, oldValue) { setTimeout(() => { if(newValue == window.s

  • vue如何监听页面缓存事件

    目录 监听页面缓存事件 事情的起因是这样的 监听缓存事件代码 在main创建缓存事件 在组件生命周期中 在组件业务代码 监听页面缓存事件 事情的起因是这样的 项目中需要用到websocket,在网页刚打开的时候,就要进行对话的连接绑定,就我这菜鸟来说,第一次这么搞事情,也是刚接触websocket没多久,这咋整啊?在App.vue中设置了绑定,所有的信息返回都在app.vue组件里面,但是其他组件怎么去获取?而且需要缓存到本地.而当初我还没接触vuex,所以在其他组件里面获取服务器返回的信息只能

  • Vue监听页面刷新和关闭功能

    我在做项目的时候,有一个需求,在离开(跳转或者关闭)购物车页面或者刷新购物车页面的时候向服务器提交一次购物车商品数量的变化. 将提交的一步操作放到 beforeDestroy 钩子函数中. beforeDestroy() { console.log('销毁组件') this.finalCart()}, 但是发现  beforeDestroy 只能监听到页面间的跳转,无法监听到页面刷新和关闭标签页. 所以还是要借助 onbeforeunload 事件. 顺便复习了一下 JavaScript 中的一

  • vue监听页面中的某个div的滚动事件并判断滚动的位置

    在开发中常常会遇到这样一个vue页面,页面分为左右两部分,左边是目录树,右边是一个类名为xq-box的div,在xq-box中多个div上下并列布局,每个div中的内容就对应着左边目录树中的相应节点,现在的目标是,要监听这个xq-box滚动事件,右边一旦开始滚动,就要知道滚动到哪个子div,并让左边的目录树中对应的节点高亮显示.要怎么做呢? 1.首先,先写好大概的页面布局,这里要注意,右边xq-box的子div要绑定"'xqItem'+序号"的id,为了下面用js能获取到匹配的dom元

  • Vue路由监听实现同页面动态加载的示例

    场景分析 在系统中一个模块有三个子模块. 业务数据中可以直接根据类型去区分这个三个子模块的归属. 通常情况下.我们是写在同一个模块中然后去选择业务类型. 但是业主要求,将这个拆分成三个菜单.用户根据自己的需求去选择需要使用的模块. 这个三个菜单使用的是同一张数据表. 所以我们肯定只写一个 list,add,edit页面的. 然后根据进入页面的路由来判断属于哪一个分类.并跳转指定分类的 新增,编辑, 和调用对应的列表接口页面 开发 由于三个模块使用的相同的页面.所以需要配置三份路由.并且做出页面区

  • 小程序中监听页面滚动的几种方法实例

    目录 目录 实现效果 下面是Intersection Observer在MDN上的介绍 IntersectionObserver relativeToViewport 接受参数 Object margins observe(string targetSelector, function callback) 参数 Object res 小程序中监听页面的其他方法 page-meta scroll-view 总结 在工作中我们经常遇到需要监听页面中元素位置,当元素超出显示区域或即将显示到页面上,我们

  • Vue数据监听方法watch的使用

    watch本身很容易理解, watch负责将视图中的数据与某个函数关联起来 当Vue视图中的数据变化时, 关联的函数会被执行 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>监听方法watch的使用</title> <script src="https://cdn.bootcss.com/

随机推荐