2008年9月1日星期一

Web打印元素位置的保存

客户要求WEB打印能够随意拖拽,并能够保存位置,这是因为原先客户用的是独立的客户端打印程序,现在软件采用BS架构,如何能达到客户的要求呢?
针对客户的需求,提出两个解决方案:(1)页面元素拖拽;(2)元素位置持久化。
(1)页面元素拖拽有很多现成的例子,Google一下一大把,这里就不说了。
(2)因为软件基于B/S/S架构,用户基于浏览器浏览,可以使用Cookie来保存用户的个性化数据,这样一来,可以针对每台机器的登录用户,有一个独立的页面元素的位置设置信息。页面上可以拖动的元素往往多达10几个甚至更多,而Cookie只能保存一条数据,这样,我们就绕个弯,把各个元素的位置信息用连接符号串成一个字符串保存,到时候页面初始化的时候,从Cookie中读出信息,再进行分解,就可以得到每个元素的位置值了。

====START====
//设置Cookie值的函数
function setCookie(name, value){
var a = name;
var b = value;
var ExpiresTime = new Date();
ExpiresTime.setTime(ExpiresTime.getTime() + 365*24*3600*1000 );
document.cookie = a+"="+b+";expires="+ ExpiresTime.toGMTString();
}

//装载页面时读取Cookie
function window.onload(){
var cookieString = new String(document.cookie);
var cookieHeader = "position=";
var beginPosition = cookieString.indexOf(cookieHeader);
var pos="";
if (beginPosition != -1){
pos = cookieString.substring(beginPosition + cookieHeader.length);
var strArray=new Array();
strArray=pos.split("#");
var ename;
var pLeft;
var pTop ;
for(var i=0;i<strArray.length-1;i++){
var temp = new Array();
temp = strArray[i].split(":");
ename=temp[0];
eLeft=temp[1];
eTop =temp[2];
document.getElementById(ename).style.left=eLeft;
document.getElementById(ename).style.top = eTop;
}
}else{ }
}

//保存各元素的位置信息到Cookie
function savePosition(){
var pos = "";
for(var i=1;i<14;i++){
var id = "p"+i;
var obj=document.getElementById(id);
posLeft=obj.offsetLeft;
posTop =obj.offsetTop;
pos = pos+id+":"+posLeft+":"+posTop+"#"; //位置值串接
}
setCookie("position",pos);
alert("保存样式成功.");
}

==== OVER ====

没有评论: