我有一个从txt文件读取的ASP.net gridview。在刷新时,它保持滚动条位置。
当前维护滚动位置代码:
<script type="text/javascript" language="javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(pageLoaded);
function pageLoaded(sender, args) {
Func()
}
function Func() {//document.getElementById("hdnScrollTop").value
document.getElementById("divScroll").scrollTop = document.getElementById("hdnScrollTop").value;
}
function Func2() {
var s = document.getElementById("divScroll").scrollTop;
document.getElementById('hdnScrollTop').value = s;
}
问题: 当滚动位置位于当前底部时,我希望它在刷新时转到新的底部。我怎么能这样做呢?
附加代码
ScrollWAjax.aspx.cs [pastebin]
其他可能的解决方案
答案 0 :(得分:0)
如果我没弄错的话,你正在做一个ajax电话。因此,您可以订阅endrequest,您可以在其中设置新的滚动位置。
prm.add_endRequest(endRequestHandler);
prm.add_beginRequest(beginRequestHandler);
var scrolledToBottom = false;
function beginRequestHandler(sender, args){
if($("#pnlGrid").scrollTop() + $("#pnlGrid").innerHeight() >= $("#pnlGrid").prop("scrollHeight")) {
scrolledToBottom = true;
}
}
function endRequestHandler(sender, args) {
if(scrolledToBottom){
$("#pnlGrid").scrollTop($("#pnlGrid").prop("scrollHeight"));
}
}
答案 1 :(得分:0)
以下是如何做到这一点。此代码假定您的gridview周围有一个面板pnlgrid
。这需要引用jquery文件。
function pageLoad(sender, args) {
if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) {
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
}
}
function BeginRequestHandler(sender, args) {
xPos = $get('pnlgrid').scrollLeft;
yPos = $get('pnlgrid').scrollTop;
}
function EndRequestHandler(sender, args) {
$get('pnlgrid').scrollLeft = xPos;
$get('pnlgrid').scrollTop = yPos;
}
请告诉我,如果这不是您正在寻找的内容,但提供更多信息,我将很乐意为您提供帮助。
答案 2 :(得分:0)
我意识到一个简单的解决方案。分隔符有一个onmousedown和onmouseup属性,我在mousedown上使用这些函数,然后停止计时器并启动计时器。这解决了现在当有人点击滚动条时它停止计时器并且不刷新的问题。当他们放手时,它会恢复计时器,该计时器设置为转到页面底部: - )
function startTimer() {
var timer = $find("<%=Timer1.ClientID%>")
timer._startTimer();
Func();
}
function stopTimer() {
var timer = $find("<%=Timer1.ClientID%>")
timer._stopTimer();
}