@zjoin

Как в React сделать задержку onMouseEnter?

Люди, вообщем есть такое положение дел:
toggleHover() {
    this.setState({ hover: !this.state.hover });
  }


Делаю ивент:
onMouseEnter={this::this.toggleHover} onMouseLeave={this::this.toggleHover}>


Как сделать сделать задержку или плавное элемента?
  • Вопрос задан
  • 1122 просмотра
Решения вопроса 2
Я только рекомендую сделать эту функцию через debounce (или аналоги):

constructor(props) {
    super(props);
    const finalMouseDelay = props.mouseDelay || 300;
    
    this.handleMouseLeave = this.handleMouseLeave.bind(this);
    this.handleMouseEnter = this.handleMouseEnter.bind(this);
    this.toggleHover = _.debounce(this.toggleHover.bind(this), finalMouseDelay);
    
    this.state = { hover: false };
  }

  handleMouseLeave() {
    this.toggleHover(false);
  }
  
  handleMouseEnter() {
    this.toggleHover(true);
  }

  toggleHover(to) {
    this.setState({ hover: to });
  }


Рабочий пример тут - jsfiddle.net/yuvuyrhv/24

Иначе у Вас будут дикие лаги, если пользователь навел мышку\убрал мышку\снова навел ... с интервалом быстрее, чем заданный вами
Ответ написан
IonDen
@IonDen
JavaScript developer. IonDen.com
1. Задержка делается с помощью банального setTimeout.
2. Если вам нужно какое-то плавное появление состояния hover. То тут вам помогут CSS-анимации.

toggleHover() {
    setTimeout(function () {
        this.setState({ hover: !this.state.hover });
    }.bind(this), 500);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 17:06
15000 руб./за проект
19 апр. 2024, в 16:53
1000 руб./за проект
19 апр. 2024, в 16:45
5000 руб./за проект