当前位置: 首页 > 后端技术 > Node.js

DOM元素的动态监控

时间:2023-04-03 20:56:35 Node.js

今天遇到了一个一直觉得很简单的问题。接手后才知道原来这么可怕。一般来说,默认的动态加载卡片应该是自动向下的,当卡片遇到页面底部时,应该自动向上渲染。动态生成的DOM根据id监听获取元素信息。坑一:当时数据较少,没有考虑卡片的渲染方向,所以卡片加载在页面底部浏览器可视化界面之外。坑一:第一次遇到这个bug的时候,好简单!!!于是加一个判断条件,在函数@mouseenter中获取触发点位置,然后加一个页高和页高screen.height进行比较,然后移卡,蒽,easy!!!letrect=this.$el.getBoundingClientRect()so,坑:快高手来了,你写死了,可扩展性不好!心里没有一丝波澜,好吧,换成动感吧!坑2:动态,嗯,改成动态判断条件就去坑2:谷歌,百度了一天,如何检查新生成的DOM元素是否超出可见页面!结果发现了一堆边框溢出判断滚动元素!完全没有智能自动检测功能。看到有些网站可以实现自动判断,所以一定要解决!证明只有程序是万能的,代码,呵呵!所以,坑:意思是高手看不下去了,“你用$nextTick获取更新的元素信息根据ID获取DOM信息!”坑3:研究$nextTick()函数,在运行中返回$nextTick(),蒽。坑4:立马开始获取动态弹出卡片的id,ummm,我找到了,我是通过控制台找到的,因为我用了一个没有用ref注解的组件,坑4:so,smallcase【找了两个小时,自闭],通过this.$rootDOM树找到元素id,这样每次找的id都是动态的!条目3:问题很快就来了。我通过id获取了元素的高度,但是每次顺序都不对。每次dom渲染后,我找到更新dom的信息。..仔细看this.$nextTick(),en,DOM更新后,函数返回操作!!!换个思路,所以通过监听DOM树的变化来获取dom变化的id,第一时间获取DOM信息让dom=document.getElementById(this.$root.$children.***.id)dom.addEventListener('DOMNodeInserted',function(){letheight=dom.getBoundingClientRect().height},false)唉,结果和$nextTick一样,令人心碎,使用函数后这个监听函数,老是获取到dom更新信息的时候,崩溃了!233、逼出来:哼,老天要杀我了!!试想一下,如果要防止在可见页面之外生成动态卡片页面,大概有两种方法,第一种是动态判断位置条件,另一种是重新调整生成的位置!好了,再次回到坑3,给position显示一个默认值,然后根据$nextTick()得到的dom信息,再根据鼠标位置,dom高度,可视化窗口document.body的高度.clientHeight【上面的gets我拿到的是电脑的信息】来判断调整!!!!/Wrysmile/苦笑,有更好的方法,请告诉我!!!