Je sais que la réponse acceptée est grande , mais pour tous ceux qui cherchent un vol stationnaire comme l' impression que vous pouvez utiliser setTimeout
sur mouseover
et enregistrez la poignée dans une carte (de liste disons LET les ids à setTimeout poignée). Sur mouseover
effacez la poignée de setTimeout et supprimez-la de la carte
onMouseOver={() => this.onMouseOver(someId)}
onMouseOut={() => this.onMouseOut(someId)
Et implémentez la carte comme suit:
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];
}
Et la carte est comme ça,
hoverHandleMap: { [listId: string]: NodeJS.Timeout } = {};
Je préfère onMouseOver
et onMouseOut
parce que cela s'applique également à tous les enfants du HTMLElement
. Si cela n'est pas nécessaire, vous pouvez utiliser onMouseEnter
et onMouseLeave
respectivement.