Aku tahu jawaban yang diterima adalah besar, tetapi untuk siapa saja yang mencari hover seperti merasa Anda dapat menggunakan setTimeout
di mouseover
dan menyimpan pegangan dalam peta (katakanlah daftar id untuk Handle setTimeout). Pada mouseover
membersihkan pegangan dari setTimeout dan menghapusnya dari peta
onMouseOver={() => this.onMouseOver(someId)}
onMouseOut={() => this.onMouseOut(someId)
Dan implementasikan peta sebagai berikut:
onMouseOver(listId: string) {
this.setState({
... // whatever
});
const handle = setTimeout(() => {
scrollPreviewToComponentId(listId);
}, 1000); // Replace 1000ms with any time you feel is good enough for your hover action
this.hoverHandleMap[listId] = handle;
}
onMouseOut(listId: string) {
this.setState({
... // whatever
});
const handle = this.hoverHandleMap[listId];
clearTimeout(handle);
delete this.hoverHandleMap[listId];
}
Dan petanya seperti itu,
hoverHandleMap: { [listId: string]: NodeJS.Timeout } = {};
Saya lebih suka onMouseOver
dan onMouseOut
karena itu juga berlaku untuk semua anak di HTMLElement
. Jika ini tidak diperlukan, Anda dapat menggunakan onMouseEnter
dan onMouseLeave
masing - masing.