Wiem Zaakceptowanych odpowiedź jest wielki, ale dla każdego, kto szuka dla zawisu jak dotyk można wykorzystać setTimeout
na mouseover
i zapisać uchwyt w mapie (od powiedzmy lista identyfikatorów setTimeout handle). Na mouseover
wyczyścić uchwyt z setTimeout i usunąć go z mapy
onMouseOver={() => this.onMouseOver(someId)}
onMouseOut={() => this.onMouseOut(someId)
I zaimplementuj mapę w następujący sposób:
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];
}
Mapa jest taka,
hoverHandleMap: { [listId: string]: NodeJS.Timeout } = {};
Wolę onMouseOver
i onMouseOut
ponieważ dotyczy to również wszystkich dzieci w HTMLElement
. Jeśli nie jest to wymagane, możesz użyć odpowiednio onMouseEnter
i onMouseLeave
.