Sé que la respuesta aceptada es grande, pero para cualquier persona que esté buscando un vuelo estacionario como la sensación puede utilizar setTimeout
en mouseover
y guardar el mango en un mapa (de la lista de identificadores de digamos vamos a setTimeout Mango). Al mouseover
borrar el identificador de setTimeout y eliminarlo del mapa
onMouseOver={() => this.onMouseOver(someId)}
onMouseOut={() => this.onMouseOut(someId)
E implemente el mapa de la siguiente manera:
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];
}
Y el mapa es así
hoverHandleMap: { [listId: string]: NodeJS.Timeout } = {};
Yo prefiero onMouseOver
y onMouseOut
porque también se aplica a todos los niños del HTMLElement
. Si no es necesario, puede utilizar onMouseEnter
y onMouseLeave
respectivamente.