Прокрутка возвращается к значению по умолчанию после отображения: нет в Chrome / IE - PullRequest
5 голосов
/ 03 января 2011

Вот пример: http://jsfiddle.net/sammy/RubNy/

Прокрутите вниз в контейнере div. Затем щелкните в любом месте окна, чтобы скрыть элемент. Затем нажмите еще раз, чтобы показать элемент. В Chrome / IE вы заметите, что прокрутка сброшена, но в Firefox прокрутка остается такой, как вы ее оставили.

Какое поведение стандартов, Chrome / IE или Firefox? Должен ли я сообщить об этом в систему отслеживания проблем Chrome?

Заранее спасибо за любую помощь в этом, и с новым годом, и еще раз спасибо, и ура, и все такое. = D

Ответы [ 4 ]

2 голосов
/ 15 декабря 2011

Хотя я не уверен, какой из двух браузеров (Chrome или Firefox) следует стандарту на этом, я буду обвинять Chrome в том, что он некорректен и не запоминает позицию прокрутки. Другими словами, я поддерживаю поведение Firefox, но я не уверен, что это правильно (стандартизировано).

Пока кто-нибудь не укажет, что является правильным согласно стандартной документации, я буду продолжать обвинять Chrome. Я сообщу об этой ошибке в систему отслеживания проблем Chrome, если я этого еще не сделал. : P

0 голосов
/ 31 марта 2018

Вы можете сохранить текущее значение element.scrollTop до некоторого значения bufferVar до display: none.Когда display: block вы сбрасываете element.scrollTop обратно на bufferVar.

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

setTimeout(() => { element.scrollTop = bufferVar; }, 100);
0 голосов
/ 03 января 2011

Это просто причуда в том, как браузеры отображают div при изменении отображения ...

По сути, браузеры переформатируют текст при изменении свойства отображения ...

Это вызываетта же причудливость ...

$(document).click(function(){
    $('div').style.display = "block";
});

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

0 голосов
/ 03 января 2011

Я не знаю, какие из них правильные, но это работает:

var offset = 0;
$(document).click(function(){
    if($('div:visible').length) {
        offset = $('div').scrollTop();   
    }
    $('div').toggle().scrollTop(offset);
});

Надеюсь, у кого-то есть лучшее решение = /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...