javascript - Angular - 监听特定的 DOM 插入,然后监听滚动事件
问题描述
假设这是一个小部件元素的 HTML:
<div class = "a b">
<div class = "c d e">
</div>
</div>
我想听那个被添加到 DOM 的小部件(最好通过 html 类捕获它)。当它被添加时,我想监听一个滚动事件(鼠标滚轮或下拉滚动器),这样当用户滚动时,小部件就会从 DOM 中删除。
我听说过各种实现,包括 using document.queryselector()
、@HostListener
、事件发射器ngDoCheck
等。我正在寻找一种对性能影响最小的实现,最好是在我的角度组件内,我们称之为MyComponent
。
编辑:我正在处理的应用程序是一个大型企业应用程序
编辑 2:我无权访问小部件的 Angular 组件,这就是为什么我不能使用@ViewChild
,所以我能抓住它的唯一方法是在它添加到 DOM 时通过它的类名。点击图标后显示小部件;我也找不到图标的 onclick 事件处理程序。
解决方案
您可以通过事件委托来做到这一点。将滚动侦听器分配给文档,然后搜索并删除您的 div(如果存在)。
let new_div = document.createElement('div');
new_div.id = 'your_widget';
new_div.style.height = '5000px';
new_div.innerText = "hello";
document.body.appendChild(new_div);
document.addEventListener('scroll', (e)=>{
if(document.querySelector('#your_widget')){
document.querySelector('#your_widget').remove();
}
})
<body></body>
推荐阅读
- javascript - 根据从 API 检索到的信息更改页面 - Ionic
- php - 单引号字符串和 mysqli_real_scape_string 出错
- string - Scala - 替换字符串中的文本占位符
- docker - 在 docker 中使用 OpenGL 和 nvidia-docker2
- angular5 - 有人在 ng-charts 2 中解决了这个问题吗
- c# - C# Xamarin 计时器类不更新视图
- java - 给定Java中的非负数数组,如何找到可能的最大数
- scala - ScalaMeta、ScalaFix 和 SemanticDB 之间的关系
- git - 我如何在 Github Desktop 中“Git stash”?
- python - 获取嵌套的python dict键和值并放在列表中