vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)


Posted in Javascript onJune 11, 2020

1、是否滚动到底部

isScrollBottom() {
   // 是否滚动到了底部
   this.box = this.$refs.chatListWrapper
   var clientHeight = this.box.clientHeight
   var scrollTop = this.box.scrollTop
   var scrollHeight = this.box.scrollHeight
   if (scrollTop + clientHeight == scrollHeight) {
    this.$store.dispatch('setBottomBtn', false, { root: true }) // 隐藏直达最新消息按钮
    this.isBottom = true
    this.isTop = false
   } else {
    this.$store.dispatch('setBottomBtn', true, { root: true }) // 显示直达最新消息按钮
    this.isTop = false
    this.isBottom = false
    if (scrollTop == 0) {
     this.isTop = true
    }
   }
  },

2、scroll滚动方向判断

getDirection() {
   // scroll滚动方向~~~~
   this.box = this.$refs.chatListWrapper
   var scrollTop = this.box.scrollTop
   var scroll = scrollTop - this.initTop
   this.initTop = scrollTop
   let dir = 'down'
   if (scroll < 0) {
    dir = 'up'
   } else {
    dir = 'down'
   }
   return dir
  },

3、滚动节流

1)、在滚动的dom上绑定scroll事件,监听滚动

vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)

2)、data中定义:fnScroll: () => {}, 初始值
3)、mounted中给fnScroll函数赋值,_.throttle实现滚动节流

this.fnScroll = _.throttle(() => {
}, 500)

4、获取滚动可视区域内dom:

实现注意:判断当前元素是否在可视区域内,若在则存到isSeeDomArr中,然后循环isSeeDomArr数组,拿到当前可视区域内的最后一个dom,再去判断是否更新对应的咨询轨迹。
不要滚动时就去更新,这样会造成不停请求更新,最后一次请求可能无效,造成数据的错乱

sendRead() {
   const chatLi = document
    .getElementById('chat_list_wrapper')
    .getElementsByTagName('li')
   var container = this.$refs.chatListWrapper
   var swHeight = container.clientHeight
   const scrollTop = container.scrollTop
   const aa = swHeight + scrollTop
   let isSeeDomArr = []
   for (let j = 0; j < chatLi.length; j++) {
    if (scrollTop < chatLi[j].offsetTop && chatLi[j].offsetTop < aa) {
     isSeeDomArr.push(chatLi[j]) //将可视区域内所有dom存储到isSeeDomArr
    }
   }
   if (isSeeDomArr.length) {
    // 非 ceo接诊台更新消息的已读状态
    if (this.$route.path.indexOf('diagnose/ceo') === -1) {
     for (let m = 0; m < isSeeDomArr.length; m++) {
      const isSelfSend = isSeeDomArr[m].getAttribute('isSelfSend')
      const msgStatus = isSeeDomArr[m].getAttribute('msgStatus')
      const msgType = isSeeDomArr[m].getAttribute('msgType')
      if (!isSelfSend && !msgStatus && msgType !== 'notice') {
       const _id = isSeeDomArr[m].getAttribute('id')
       this.sendReadApi(_id)
      }
     }
    }
    // 更新聊天对应的咨询轨迹
    this.setCurrentFdAsk(
     isSeeDomArr[isSeeDomArr.length - 1].getAttribute('fdAsk')
    )
   }
  },

the end:滚动加载这些判断前前后后改了好多次,这次终于感觉逻辑比较清晰了,也算对自己有个交代。。。

到此这篇关于vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)的文章就介绍到这了,更多相关vue scroll滚动判断内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery事件 delegate()使用方法介绍
Oct 30 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
Jul 10 Javascript
jQuery extend 的简单实例
Sep 18 Javascript
js点击选择文本的方法
Feb 09 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
Feb 24 Javascript
jQuery中table数据的值拷贝和拆分
Mar 19 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
Apr 21 Javascript
JS实现图片预览的两种方式
Jun 27 Javascript
JavaScript数据类型的存储方法详解
Aug 25 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
Aug 30 Javascript
vue单页缓存方案分析及实现
Sep 25 Javascript
解决vue 单文件组件中样式加载问题
Apr 24 Javascript
Vue初始化中的选项合并之initInternalComponent详解
Jun 11 #Javascript
Vue组件为什么data必须是一个函数
Jun 11 #Javascript
Vue实现点击箭头上下移动效果
Jun 11 #Javascript
webpack+express实现文件精确缓存的示例代码
Jun 11 #Javascript
详解vue 组件
Jun 11 #Javascript
vue实现员工信息录入功能
Jun 11 #Javascript
JavaScript Event Loop相关原理解析
Jun 10 #Javascript
You might like
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
php 服务器调试 Zend Debugger 的安装教程
2009/09/25 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
vuex直接赋值的三种方法总结
2018/09/16 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
javascript中函数的写法实例代码详解
2018/10/28 Javascript
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
Python中统计函数运行耗时的方法
2015/05/05 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
Java文件和目录(IO)操作
2014/08/26 面试题
奥巴马演讲稿
2014/01/08 职场文书
写给女生的道歉信
2014/01/08 职场文书
给客户的道歉信
2014/01/13 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
供货协议书
2014/04/22 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
2014年团支部工作总结
2014/11/17 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
2015年保管员工作总结
2015/04/30 职场文书
创业计划书之花店
2019/09/20 职场文书
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL
golang为什么要统一错误处理
2022/04/03 Golang