Как убрать принудительный скроллинг в верх страницы при возврате назад?

ЕСТЬ РЕШЕНИЕ InstantCMS 2.X
#1 28 сентября 2023 в 09:50

Всем привет. Не смог нормально сформулировать название темы, чтобы оно правильно передавало суть моего запроса.

Вопрос такой: для чего был сделан принудительный вертикальный скроллинг в самый верх страницы в некоторых разделах при возврате назад?

Пример такого раздела можно увидеть на этом же сайте, на котором мы находимся — https://instantcms.ru/users
Точно также работает в последней версии icms раздел /users, что на десктопе, что в мобильной версии — одинаково.

Если мы открутим список пользователей вниз, например, на пол страницы или ближе к низу, затем перейдем по ссылке из списка на страницу какого-нибудь юзера, просмотрим ее, а затем вернемся обратно к списку с помощью кнопки «Назад» в браузере. При возвращении происходит принудительный скроллинг в самый вверх страницы, и мы улетаем с того места в списке на котором остановились, и чтобы найти это место — нужно откручивать снова вниз, искать глазами то место, на котором остановились. 

Кто знает для чего это нужно? Ведь это же неудобно. Это недочет или задумка? 

А вот на странице — https://instantcms.ru/freelancers при возврате назад к списку, страница сразу открывается сверху и потом идет автоскроллинг к тому месту, на котором остановился просмотр до перехода на страницу юзера. 

Не совсем понятно зачем нужны эти скроллинги, почему нельзя сделать обычный возврат сразу к тому месту, на котором закончилось чтение страницы, как это реализовано почти на всех сайтах. 

Кто знает, как это изменить? Как убрать скроллинг вверх страницы при возврате к списку на mysite.ru/users? Или на крайний случай — сделать, как на этой странице https://instantcms.ru/freelancers — принудительный скроллинг к той точке, на которой остановились, если зачем-то обязательно нужны эти скроллинги и нельзя просто вернуться в тоже место с которого был сделан переход. 

#2 28 сентября 2023 в 14:37

О чем вы пишете не знаю, у меня все работает корректно, откуда переходил, при возврате возвращается туда же. Специально это никто не делал

#3 28 сентября 2023 в 16:32

О чем вы пишете не знаю, у меня все работает корректно, откуда переходил, при возврате возвращается туда же. Специально это никто не делал

Clear

А какой браузер?

#4 29 сентября 2023 в 04:21

На странице пользователей есть такое, но это нужно уточнять что там. Вот пример.

для диагностики и решения проблемы:

  1. Проверьте JavaScript: Отключите JavaScript в вашем браузере и попробуйте повторить проблему. Если прокрутка вверх не происходит, это может указывать на то, что причина в каком-то скрипте на странице.
  2. Проверьте динамическую загрузку контента: Если на странице используется динамическая загрузка контента (например, с помощью AJAX), попробуйте отключить эту функцию и проверить, решит ли это проблему.
  3. Проверьте расширения браузера: Отключите все расширения или плагины в вашем браузере и проверьте, исчезает ли проблема. Если да, включайте расширения по одному, чтобы определить, какое из них вызывает проблему.
  4. Проверьте настройки сервера: Если у вас есть доступ к настройкам сервера, убедитесь, что нет никаких редиректов или других настроек, которые могут вызвать перезагрузку страницы.
  5. Обратитесь к разработчикам: Если вы не являетесь разработчиком этого сайта, рекомендую обратиться к команде разработчиков или администратору сайта с описанием проблемы.
#5 29 сентября 2023 в 16:11

templates/modern/js/core.js.

Тут смотри. Я у себя убрал, вот только не помню уже что именно. 

#6 29 сентября 2023 в 17:22

templates/modern/js/core.js.

Тут смотри. Я у себя убрал, вот только не помню уже что именно. 

pupsik

Ооо, то что надо! Премного благодарен. Нашел там «scroll-top». Удалил этот кусок:

...this.initScrollTop = function(){
        var link = $('#scroll-top');
        if($(link).length === 0){ return; }
        if($(window).scrollTop() > 350){
            $(link).addClass('position-fixed');
        }
        $(window).on('scroll', function() {
            if($(this).scrollTop() > 350){
                $(link).addClass('position-fixed');
            } else {
                $(link).removeClass('position-fixed');
            }
        });
        $(link).on('click', function(t) {
            $('html, body').scrollTop(0);
            t.preventDefault();
        });
    };

И все стало работать нормально, без этого прыгающего скроллинга.

Большое спасибо, вы мне очень помогли!

Добавлено спустя 10 минут

Но! Если убрать этот кусок кода, то перестают работать некоторые кнопки. Например кнопка «Войти» или «Мои сообщения», принаведении на них курсором они не кликабельные. 

#7 29 сентября 2023 в 17:26

Не тот кусок убрал, у меня тоже так было. 

#8 29 сентября 2023 в 17:33

Проблема остается не решенной. За принудительный скроллинг вверх страницы отвечает файл templates/modern/js/core.js

И конкретно этот код:

this.initScrollTop = function(){
        var link = $('#scroll-top');
        if($(link).length === 0){ return; }
        if($(window).scrollTop() > 350){
            $(link).addClass('position-fixed');
        }
        $(window).on('scroll', function() {
            if($(this).scrollTop() > 350){
                $(link).addClass('position-fixed');
            } else {
                $(link).removeClass('position-fixed');
            }
        });
        $(link).on('click', function(t) {
            $('html, body').scrollTop(0);
            t.preventDefault();
        });
    };

Но если просто удалить этот код перестают работать другие функции, кнопки, которые открывают модальные окна «Мои сообщения» и «Войти» становятся некликабельными. Поэтому это не решение. 

Кто может подсказать как правильно отредактировать templates/modern/js/core.js чтобы убрать скроллинг и при этом ничего другого не сломалось?

#9 29 сентября 2023 в 17:34

И конкретно этот код:

Нет, не этот

Вот этот:

  1. if(active_link.length > 0){
  2. $(active_link).get(0).scrollIntoView({block: "end", inline: "nearest"});
  3. }

Удали этот кусок

#10 29 сентября 2023 в 17:54

И конкретно этот код:

Нет, не этот

Вот этот:

  1. if(active_link.length > 0){
  2. $(active_link).get(0).scrollIntoView({block: "end", inline: "nearest"});
  3. }

Удали этот кусок

pupsik

Супер! Теперь все норм, и скроллинга нет и вроде ничего не сломалось.

Я бы сам ни за что не догадался, не шарю в js вообще.

Большое спасибо!

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.