Как сохранить всю позицию прокрутки страницы после асинхронной обратной передачи
Я использую asp.net 4.0 iis 7.5 Microsoft Visual Studio 2010
я хочу сохранить положение прокрутки всей страницы (браузера) (не div или панели), когда произошла асинхронная обратная передача (панель обновления)
как я могу это сделать
на самом деле у меня была функция, которая может сохранить положение полосы прокрутки div после обратной передачи, как это
<script type="text/javascript">
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args) {
xPos = document.getElementById('Main').scrollLeft;
yPos = document.getElementById('Main').scrollTop;
}
function EndRequestHandler(sender, args) {
document.getElementById('Main').scrollLeft = xPos;
document.getElementById('Main').scrollTop = yPos;
}
</script>
но я не смог найти идентификатор полосы прокрутки браузера, чтобы получить его значения, чтобы получить с document.getElementById
спасибо за ответы
3 ответа
asp.net имеет свойство директивы @page, которое называется MaintainScrollPositionOnPostBack
надеюсь, это поможет
Я нашел это здесь: http://forums.asp.net/t/1300961.aspx
просто добавьте его сразу после менеджера скриптов. у меня работает во всех браузерах
<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(beginRequest);
function beginRequest()
{
prm._scrollPosition = null;
}
</script>
Вы можете сделать это клиентским способом:
$(document).ready(function () {
$(window).on('beforeunload', function () {
document.cookie = "keepscroll=" + $(window).scrollTop();
});
var cs = document.cookie ? document.cookie.split(';') : [];
var i = 0, cslen = cs.length;
for (; i < cs.length; i++) {
var c = cs[i].split('=');
if (c[0].trim() == "keepscroll") {
$(window).scrollTop(parseInt(c[1]));
break;
}
}
});
Если вы не являетесь другом jQuery, вы можете попробовать что-то вроде:
window.onbeforeunload = function () {
document.cookie = "keepscroll=" + document.body.scrollTop;
};
var keepscroll = window.setTimeout(function () {
var cs = document.cookie ? document.cookie.split(';') : [];
var i = 0, cslen = cs.length;
for (; i < cs.length; i++) {
var c = cs[i].split('=');
if (c[0].trim() == "keepscroll") {
window.scrollTo(0, parseInt(c[1]));
break;
}
}
window.clearTimeout(keepscroll);
keepscroll = null;
}, 100);