javascript - 从组件角度添加类
问题描述
我有这段代码允许我在特定的 DIV 中滚动,我尝试做的是在滚动时将临时类添加到该 div 中,并在一秒钟后删除该类。
scrollTo (id) {
setTimeout(() => {
var titleELe = document.getElementById(id); // my destination div on scroll
this.scrollMeElement.scrollToPoint(0, titleELe.offsetTop, 1000); // add class to it for 1 second
}, 100);
};
怎么做?
更新
我做了这个改变:
component
scrolledItem: boolean = false; // added
constructor(...){...}
scrollTo (id) {
setTimeout(() => {
var titleELe = document.getElementById(id);
this.scrolledItem = true; // added
this.scrollMeElement.scrollToPoint(0, titleELe.offsetTop, 1000);
}, 100);
this.scrolledItem = false; // added
};
然后在我的html
我添加了[class.active] = "scrolledItem"
喜欢
<div id="{{message.id}}" [class.active] = "scrolledItem" class="receiver"></div>
这确实为我的 div 添加了类,但有两个问题:
- 它将类添加到所有行,而不仅仅是目标 div。
- 它不会
active
从我的 div 中删除类。
截屏
任何想法?
解决方案
在我看来,你应该使用模板变量item
来传递给函数滚动。
<div class="message" *ngFor="let message of listMessage" (click)="scroll(item)" #item>
<span>Message {{ message }}</span>
</div>
因此,在您的函数中,您可以访问offsetTop
,classList
以HTMLElement
滚动和操作类。
scroll(item: HTMLElement) {
window.scrollTo(0, item.offsetTop)
if (this.oldElemt) {
this.oldElemt.classList.remove('active')
}
item.classList.add('active')
this.oldElemt = item
}
使用变量来保存旧元素,如oldElemt
.
这是链接演示
推荐阅读
- cmake - 查找需要 DEPENDS 选项的 CMake 文件生成 add_custom_command 示例
- ios - 应用程序运行后如何继续制作动画?
- python - 为什么 pyautogui 的 write() 自己实现键延迟
- java - 我根据用户从 Excel 表中选择的浏览器并行进行跨浏览器测试的方法是否正确?
- java - 在 TestNG 中运行包时出现 java.lang.NullPointerException
- powershell - 如何过滤掉内置和不需要的组(Where-Object PS)
- python - 如何将文件夹中的所有文件作为输入(一次一个)并在处理后将它们保存到另一个文件夹中?
- go - 使用管道的 Redis 客户端计数
- javascript - 如何在 .test.js 中模拟 firebase .auth().currentUser
- c++ - 将 std::forward 用于未进一步传递给函数的通用引用是否有意义?