Подтвердить что ты не робот

Восстановление позиции прокрутки страницы с помощью jQuery

У меня есть операция страницы, которая использует что-то вроде:

$('#thetable tbody').replaceWith(newtbody);

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

Теперь, поскольку я обнаружил, что выполнение:

$('body').scrollTop(300);

от консоли отладчика JS делает то, что я надеялся, я думал, что простым средством было бы:

var scrollsave = $('body').scrollTop();
$('#thetable tbody').replaceWith(newtbody);
$('body').scrollTop(scrollsave);

но не радость. Я еще не прибегал к jQuery.ScrollTo.

4b9b3361

Ответ 1

У нас была такая же проблема, и следующий код отлично работает...

var scroll = $(window).scrollTop();
// yada
$("html").scrollTop(scroll);

Ответ 2

var position= $(window).scrollTop();

//some things here

$(window).scrollTop(position);

Он работал у меня как в IE8, так и в FF.

Ответ 3

Обязательно используйте return false;, чтобы завершить конструкцию function(){}.

Триггер события может пытаться выполнить действие по умолчанию для целевого элемента DOM, т.е. < a href="" >;

Ответ 4

Используете ли вы aspx? если он aspx:

$(document).ready(function () {
        //------------ scroll-------------
         
        $('body').scrollTop(document.getElementById('<%=hdScroll.ClientID%>').value);
            
        $(window).scroll(function () {
            $("#<%= hdScroll.ClientID %>").val($(window).scrollTop());
            //alert(document.getElementById('<%=hdScroll.ClientID%>').value);
        });
       });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <asp:HiddenField Id="hdScroll" runat="server"></asp:HiddenField>

Ответ 6

Вы можете периодически проверять div outerHeight и устанавливать свойство scrollTop после того, как рендеринг div пересек значение прокрутки.

var g_Interval ;
var g_ScrollTop ;

function checkAndAdjustScroll() {
    var height=$('#content').outerHeight() ;
    if(height>g_ScrollTop) {
            $(window).scrollTop(g_ScrollTop) ;
            clearInterval(g_Interval) ;
    }
}

И всякий раз, когда вы обновляете свой div с помощью содержимого AJAX, сделайте это

g_ScrollTop=$(window).scrollTop() ;
g_Interval=setInterval(checkAndAdjustScroll, 100) ;

Возможно, вам придется внести корректировки на основе смещения вашего div в верхней части страницы