Ответ 1
У нас была такая же проблема, и следующий код отлично работает...
var scroll = $(window).scrollTop();
// yada
$("html").scrollTop(scroll);
У меня есть операция страницы, которая использует что-то вроде:
$('#thetable tbody').replaceWith(newtbody);
в обратном вызове ajax. Иногда, если пользователь прокрутил страницу вниз, эта операция имеет понятный побочный эффект прокрутки страницы. Но замена кажется плавной для пользователя, поэтому немного раздражать, чтобы снова прокручивать назад. И так как newtbody
обычно имеет ту же высоту по вертикали, что и та, которую он заменил, мы должны сделать script сделать это вместо этого.
Теперь, поскольку я обнаружил, что выполнение:
$('body').scrollTop(300);
от консоли отладчика JS делает то, что я надеялся, я думал, что простым средством было бы:
var scrollsave = $('body').scrollTop();
$('#thetable tbody').replaceWith(newtbody);
$('body').scrollTop(scrollsave);
но не радость. Я еще не прибегал к jQuery.ScrollTo.
У нас была такая же проблема, и следующий код отлично работает...
var scroll = $(window).scrollTop();
// yada
$("html").scrollTop(scroll);
var position= $(window).scrollTop();
//some things here
$(window).scrollTop(position);
Он работал у меня как в IE8, так и в FF.
Обязательно используйте return false;
, чтобы завершить конструкцию function(){}
.
Триггер события может пытаться выполнить действие по умолчанию для целевого элемента DOM, т.е. < a href="" >;
Используете ли вы 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>
Попробуйте следующее: http://jsfiddle.net/utTt4/
Вы можете периодически проверять 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
в верхней части страницы