#javascript #typescript #event-listener #two.js
#javascript #typescript #прослушиватель событий #two.js
Вопрос:
Я использую Two.js для рисования svg-изображения в приложении Angular.
после рисования svg (в котором есть некоторые элементы внутри) в two.js Я добавляю прослушиватель событий к его элементам следующим образом:
this.courtRenderer.update(); //after this command two.js draw the svg
for (const trajectory of this.trajectories) {
trajectory.renderedLine._renderer.elem.addEventListener('mouseenter', (event) => {
this.onRenderedLineMouseEnter(event, this.trajectories.filter((selectedTrajectory) =>
selectedTrajectory.renderedLine.id === trajectory.renderedLine.id));
}, false);
trajectory.renderedLine._renderer.elem.addEventListener('mouseleave', () => {
this.onRenderedLineMouseLeave(this.trajectories.filter((selectedTrajectory) =>
selectedTrajectory.renderedLine.id === trajectory.renderedLine.id));
}, false);
}
Тогда у меня есть обработчик для этого, который изменяет ширину строки и цвет строки, а также отправляет информацию в службу, чтобы открыть всплывающее окно в положении мыши.
private onRenderedLineMouseEnter(event, trajectories){
let renderedLine;
for (const trajectory of trajectories){
renderedLine = trajectory.renderedLine;
renderedLine.linewidth = renderedLine.linewidth * this.appConfig.courtRenderer.highlightedTrajectoryWeight;
renderedLine.stroke = this.appConfig.courtRenderer.colors.highlightedTrajectory;
}
this.courtRenderer.update();
const popupPosition = new PopupPosition(renderedLine.id, event.layerX, event.layerY);
this.virtualCourtService.selectShot(popupPosition);
}
Он не работает, пока я не запущу консоль (F12) в браузере… Я не знаю почему, но, как я уже сказал, когда я нажимаю F12 в Google Chrome, все работает… Почему не раньше?
Редактировать: когда я устанавливаю точку останова в методе onRenderedLineMouseEnter и наведу курсор мыши на точку останова строки, она фиксируется, а затем она работает без инспектора.
Я также добавил некоторую консоль.войдите в этот метод, и либо с инспектором, либо без инспектора запускается код, но только с инспектором (или с точкой останова) изменения пользовательского интерфейса вносятся.
Комментарии:
1. В зависимости от настройки инспектора кэш браузера отключается при открытии инспектора; вероятно, ваша проблема связана с кэшем браузера.
2. Такая ситуация происходит во всех браузерах (Brave, Chrome, Firefox, Edge) и даже на других компьютерах.
3. Что происходит, если вы запускаете код после тайм-аута, может быть, ваш код запускается в ближайшее время?
4. то же самое. Я установил тайм-аут на 5 секунд, и он работает таким же образом. Код запускается в нужное время, и доказательством этого может быть то, что все журналы запускаются, когда я перемещаю мышь по траектории. Проблема в том, что пользовательский интерфейс не обновляется.
Ответ №1:
Я заметил кое-что еще — когда окно браузера неактивно, обработчики работают правильно, но когда я нажимаю на окно браузера, и оно активно, тогда оно не работает. Вот почему я написал об инспекторе — этот инструмент привел к тому, что инспектор является активным окном, а содержимое браузера неактивно.