写ASP.NET页面,最头痛的就是每次刷新后,滚动条又回到了页面顶端,如果页面比较长,这样滚动起来就很痛苦,虽然Ajax的出现,这个问题得到了解决,可是不少以前的项目还是得手动去滚动页面,这样客户体验非常差。这里介绍两个简单的方法,实现页面滚动条的位置保持
1.smartNavigation
如果想省事,这个方法最简单了,设置项目的web.config属性,就能做到滚动条记忆



也可以只针对某一个页面来设置这个属性,他的实现原理,其实是对页面的输出进行了一次封装,将整个页面放在了一个IFrame里
...

src ="/aspnet_client/system_web/1_1_4322/SmartNav.htm" ></ IFRAME >
...

...
有兴趣可以去研究一下SmartNav.js,我这里就不多说了,可以参考http://www.cnblogs.com/birdshome/archive/2004/09/03/39115.aspx
2.使用脚本来控制滚动
使用第一种方法确实方便,但由于使用的是IFrame,会出现一些不兼容的情况,这里再介绍另一个方法
{
if (getcookie( " height " ) != null )
document.body.scrollTop = getcookie( " height " );
}
window.onunload = function ()
{
setcookie( " height " ,document.body.scrollTop);
}
function getcookie(sName)
{
var aCookie = document.cookie.split( " ; " );
for ( var i = 0 ; i < aCookie.length; i ++ )
{
var aCrumb = aCookie[i].split( " = " );
if (sName == aCrumb[ 0 ])
return unescape(aCrumb[ 1 ]);
}
return null ;
}
function setcookie(sName, sValue)
{
date = new Date();
date.setTime(date.getTime() + 5000 ); // 5 second
document.cookie = sName + " = " + escape(sValue) + " ; expires= " + date.toGMTString();
}
也就是说在页面onunload的时候,记住滚动条位置,在onload的时候控制滚动条移动,从客户体验来看,第一种要好于第二种,从兼容来看,第二种又较,如果smartNavigation使用后没有出现异常(主要是客户端的)建议还是使用smartNavigation,实在不行了,再考虑第二种。