前几天需要做个滚动条定位功能 网上查些资料总结如下
基本原理就是使用cookie保存滚动条的位置 刷新后读取cookie
前台代码
<body id="mybody" οnscrοll="SetCookie('scroll',getObject('mybody').scrollTop)" οnclick="scrollback()" > <SCRIPT LANGUAGE="JavaScript" src="../JScript.js" type="text/jscript"> </SCRIPT>
JScript.js
function Trim(strValue) { return strValue.replace(/^/s*|/s*$/g,""); } function SetCookie(sName, sValue) { document.cookie = sName + "=" + escape(sValue); }
function GetCookie(sName) { var aCookie = document.cookie.split(";"); for (var i=0; i < aCookie.length; i++) { var aCrumb = aCookie[i].split("="); if (sName == Trim(aCrumb[0])) { return unescape(aCrumb[1]); } }
return null; } function scrollback() { if (GetCookie("scroll")!=null){document.all("mybody").scrollTop=GetCookie("scroll")} } function getObject(id){ if(document.getElementById) { return document.getElementById(id); } else if(document.all) { return document.all[id]; } else if(document.layers) { return document.layers[id]; }}function xmlhttp(){ var A=null; try { A=new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { A=new ActiveXObject("Microsoft.XMLHTTP"); } catch(oc) { if (typeof XMLHttpRequest != "undefined" ); { A=new XMLHttpRequest(); } } } return A;}
单只是这些客户端代码还够 在中的page_Load中还需加入 this.SmartNavigation = true;但在VS2005中SmartNavigation 属性以被MaintainScrollPositionOnPostBack 取代使用SmartNavigation
两种方式个有优缺点 SmartNavigation ,JScript.js文件和this.SmartNavigation = true都需要而去页面不存在刷新问题
VS2005中若使用 Page.MaintainScrollPositionOnPostBack = true; 则只需这一句可以定位了 但当数据较多时刷新问题很严重
