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 相关文章推荐
ie8模式下click无反应点击option无反应的解决方法
Oct 11 Javascript
用原生js做个简单的滑动效果的回到顶部
Oct 15 Javascript
js实现网页标题栏闪烁提示效果实例分析
Nov 20 Javascript
有关JavaScript中call()和apply() 的一些理解
May 20 Javascript
JS中的==运算: [''] == false —&gt;true
Jul 24 Javascript
AngularJS用户选择器指令实例分析
Nov 04 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
Jul 27 Javascript
详解在vue-cli中使用路由
Sep 25 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
Dec 27 Javascript
AngularJS与后端php的数据交互方法
Aug 13 Javascript
fastadmin中调用js的方法
May 14 Javascript
原生JavaScript创建不可变对象的方法简单示例
May 07 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
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
简单了解django orm中介模型
2019/07/30 Python
python入门之井字棋小游戏
2020/03/05 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
毕业研究生的自我鉴定
2013/11/30 职场文书
给老师的一封建议书
2014/03/13 职场文书
志愿者活动总结报告
2014/06/27 职场文书
2015年党员干部承诺书
2015/01/21 职场文书