Сохранение позиции скролла при перезагрузке страницы

Discussion in 'Javascript' started by GAiN, 22 Nov 2023.

  1. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    Здравствуйте. динамическая html таблица имеет горизонтальный скролл.
    Каким образом можно реализовать и запомнить положение скролла и при обновлении страницы оставить на том же месте ?
     
  2. ckpunmkug

    ckpunmkug Member

    Joined:
    20 Mar 2017
    Messages:
    72
    Likes Received:
    72
    Reputations:
    10
    Принцип работы

    Дождались события загрузки окна и запустили стартовую функцию.
    Обратились за сохранёнными позициями скрола.
    Если позиции были сохранены скролируем окно в них, если не были обнуляем значения позиций.

    Добавляем реакцию на событие скроллирование окна.
    Когда происходит скролирование окна вызывается функция.
    Если значение позиции отличается от текущего.
    Становится равным ему и сохраняется.
    Code:
    var windowScrollX = 0, windowScrollY = 0;
    function windowOnLoad(event)
    {
        windowScrollX = localStorage.getItem("windowScrollX");
        windowScrollY = localStorage.getItem("windowScrollY");
      
        if(typeof(windowScrollX) == "number" && typeof(windowScrollY) == "number") {
            window.scrollTo(windowScrollX, windowScrollY);
        } else {
            windowScrollX = 0;
            windowScrollY = 0;
        }
      
        document.addEventListener("scroll", documentOnScroll);
        return(null);
    }
    function documentOnScroll(event)
    {
        if(window.scrollX != windowScrollX) {
            windowScrollX = window.scrollX;
            localStorage.setItem("windowScrollX", windowScrollX);
        }
        if(window.scrollY != windowScrollY) {
            windowScrollY = window.scrollY;
            localStorage.setItem("windowScrollY", windowScrollY);
        }
    }
    window.addEventListener("load", windowOnLoad);
     
    GAiN likes this.