Как предотвратить прокрутку похожих событий с помощью Socket.io ? — Angular 7

#javascript #angular #sockets #socket.io #angular7

#javascript #angular #сокеты #socket.io #angular7

Вопрос:

При обновлении элемента массива используйте сокет.io затем страница прокручивается вниз в Angular 7. Пожалуйста, расскажите, как остановить прокрутку страницы вниз в подобном событии.

введите описание изображения здесь

 this.socket.on(discussion.id, (reponse: any) => 
      {
        for (const [index, discussion] of this.discussionList.entries()) {
          if (reponse.data.id == discussion.id)
          {
            reponse.data.displayComment = discussion.displayComment;
            this.discussionList[index] = reponse.data;
            console.log('Updated');
            break; //Stop this loop, we found it!
          }
          console.log('finding....');
        }
      });
  

Комментарии:

1. пожалуйста, предоставьте более подробную информацию о том, что вы сделали для достижения этого?

Ответ №1:

Вы в основном обновляете некоторый случайный элемент в массиве, который отображается в виде списка. Конечно, ваш список изменит содержимое, и новое содержимое может появиться в текущем представлении. Это то, как работает html в браузере — ничего, связанного с «Angular 7». Прокрутка не изменена — изменено то, что видно в текущей прокрутке.

То, что вы хотите сделать, — это простое безумие JS:

  1. Перед обновлением массива «запомните», что было видно в текущем прокручиваемом представлении. Например, вы читаете scrollTop, и они перебирают каждый элемент в списке и проверяют его смещение от top — ближайший к scrollTop — win.
  2. После обновления списка найдите этот элемент и прокрутите его обратно.

Это грязно, тяжело для производительности, но это цена изменения случайного фрагмента html на странице.