拖动布局之保存布局页面cookies篇


Posted in Javascript onOctober 29, 2010

我实现的方法是记录每列拥有的拖动对象,这样在初始或刷新的时候读取这列有哪些拖动对象,直接把拖动对象通过appenChild加进去就可以了,比如拖动后列的id为col2,在这一列的拖动对象的id为col1_2,col3_1,col2_1,我就把col2=col1_2|col3_1|col2_1记录下来,在刷新页面的时候就读取col2的值,循环通过document.getElementById(col2).appendChild(document.getElementById(col1_2))实现显示布局的结果。呵呵!也不知我说的明不明白,不过看后面的代码应该就会清楚了。好了废话少说,看实现的代码吧!!
首先要保存拖动后的记录,一个是通过数据库,一个是cookie,我这用的是cookie。下面是一个cookie的类

function CookieClass(){ 
this.expires = 0 ; //有效时间,以分钟为单位 
this.path = ""; //设置访问路径 
this.domain = ""; //设置访问主机 
this.secure = false; //设置安全性 
this.setCookie = function(name,value){ 
var str = name+"="+escape(value); 
if (this.expires>0){ //如果设置了过期时间 
var date=new Date(); 
var ms=this.expires * 60 * 1000; //每分钟有60秒,每秒1000毫秒 
date.setTime(date.getTime()+ms); 
str+="; expires="+date.toGMTString(); 
} 
if(this.path!="")str+="; path="+this.path; //设置访问路径 
if(this.domain!="")str+="; domain="+this.domain; //设置访问主机 
if(this.secure!="")str+="; true"; //设置安全性 
document.cookie=str; 
} 
this.getCookie=function(name){ 
var cookieArray=document.cookie.split("; "); //得到分割的cookie名值对 
var cookie=new Object(); 
for(var i=0;i<cookieArray.length;i++){ 
var arr=cookieArray[i].split("="); //将名和值分开 
if(arr[0]==name)return unescape(arr[1]); //如果是指定的cookie,则返回它的值 
} 
return ""; 
} 
this.deleteCookie=function(name){ 
var date=new Date(); 
var ms= 1 * 1000; 
date.setTime(date.getTime() - ms); 
var str = name+"=no; expires=" + date.toGMTString(); //将过期时间设置为过去来删除一个cookie 
document.cookie=str; 
} 
this.showCookie=function(){ 
alert(unescape(document.cookie)); 
} 
}

好了,现在就用这个东西保存拖动后的结果。 要保存结果当然是在onmouseup事件,因为只有鼠标松开才说明这一次拖动结束了,所以在onmouseup事件中增加以下的代码。
//------------------------- 
var cook = new CookieClass(); 
cook.expires =1;//一分钟有效 
//--------------------------- 
var DragContainer=["col1","col2","col3"];//用来实现布局的列的div的id 
var dragContainerLen=DragContainer.length; 
//以上的代码应该不用解释 
//鼠标松开 
function mouseUp(){ 
if(dragObject){ 
if(dragObject.parentNode.style.display=="none") dragObject.parentNode.style.display="block"; 
dragObject.parentNode.style.border="1px solid #FFCC66"; 
tmpDiv.style.display="none"; 
for(var m=0;m<DragContainer.length;m++){ 
var colDiv=document.getElementById(DragContainer[m]); 
var colDivLen=colDiv.getElementsByTagName("div").length 
var colSty=colDiv.getAttribute("style"); 
if(colDivLen>0&&colSty!=null){ 
colDiv.removeAttribute("style"); 
break; 
} 
} 
//这是增加的代码----------------------------------------------- 
for(var ed=0;ed<dragContainerLen;ed++){ 
var dragConId=DragContainer[ed]; 
var dragObj=document.getElementById(dragConId); 
dragObj.removeAttribute("style"); 
var dragDiv=dragObj.getElementsByTagName("div"); 
if(dragDiv){ 
var dragDivLen=dragDiv.length; 
var dragDivIdArr=[]; 
for(var dd=0;dd<dragDivLen;dd++){ 
var dragDivId=dragDiv[dd].getAttribute("id"); 
dragDivIdArr[dd]=dragDivId; 
} 
tmp=dragDivIdArr.join("|"); 
if(tmp=="") tmp=0; 
} 
cook.setCookie(dragConId,tmp); 
} 
//这是增加的代码------------------------------------------------------ 
dragObject=null; 
return false; 
} 
}

增加的代码就是把col1=col2_1|col3_2这类的东西写入到cookie。剩下的就是在页面刷新或页面开始加载的时候读取cookie,实现显示拖动布局的最后结果,这段代码当然是在onload中
var nl=0; 
var dragNull=[]; 
window.onload=function(){ 
tmpDiv=document.createElement("div"); 
tmpDiv.style.cssText = 'position:absolute;display:none;border:1px dotted #FFCC66;'; 
document.body.appendChild(tmpDiv); 
//这是增加的代码 
for(var init=0;init<dragContainerLen;init++){ 
var initDragId=DragContainer[init]; 
var initDragContainer=document.getElementById(initDragId); 
var initDragDiv=cook.getCookie(initDragId); 
if(initDragDiv!=0){ 
var initDragArr=initDragDiv.split("|"); 
var initDragArrLen=initDragArr.length; 
for(var k=0;k<initDragArrLen;k++){ 
var chi=document.getElementById(initDragArr[k]); 
initDragContainer.appendChild(chi); 
} 
} 
else{ 
dragNull[nl]=initDragId; 
nl=nl+1; 
} 
} 
if(nl>0&&nl<3){ 
var nullLen=dragNull.length; 
for(var nn=0;nn<nullLen;nn++){ 
var nullId=dragNull[nn]; 
var nulldiv=document.getElementById(nullId); 
nulldiv.style.height="20px"; 
} 
} 
//这是增加的代码 
}

好了,就这么多,看不明白我说的就看代码吧,不足的地方欢迎指教(感觉有bug,有时好像不行,等有时间再研究下)!!
Javascript 相关文章推荐
通过JAVASCRIPT读取ASP设定的COOKIE
Nov 24 Javascript
一直复略了的一个问题,关于表单重复提交
Feb 15 Javascript
Jquery实现的tab效果可以指定默认显示第几页
Oct 16 Javascript
jquery索引在使用中的一些困惑
Oct 24 Javascript
用JS实现轮播图效果(二)
Jun 26 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
Sep 01 Javascript
javascript代码调试之console.log 用法图文详解
Sep 30 Javascript
socket.io学习教程之深入学习篇(三)
Apr 29 Javascript
Js经典案例的实例代码
May 10 Javascript
Array数组对象中的forEach、map、filter及reduce详析
Aug 02 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
Aug 16 Javascript
Jquery动态列功能完整实例
Aug 30 jQuery
JS函数验证总结(方便js客户端输入验证)
Oct 29 #Javascript
JavaScript 原型链学习总结
Oct 29 #Javascript
JavaScript 原型学习总结
Oct 29 #Javascript
用JQuery调用Session的实现代码
Oct 29 #Javascript
基于jquery 的一个progressbar widge
Oct 29 #Javascript
JQuery开发的数独游戏代码
Oct 29 #Javascript
Web前端设计模式  制作漂亮的弹出层
Oct 29 #Javascript
You might like
用定制的PHP应用程序来获取Web服务器的状态信息
2006/10/09 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
composer.lock文件的作用
2016/02/03 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
YUI Compressor压缩JavaScript原理及微优化
2013/01/07 Javascript
JQuery在页面中添加和除移DOM示例代码
2013/06/24 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
浅谈从React渲染流程分析Diff算法
2018/09/08 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
2018/12/17 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
Python简单定义与使用二叉树示例
2018/05/11 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
parser.add_argument中的action使用
2020/04/20 Python
Python多分支if语句的使用
2020/09/03 Python
python 调整图片亮度的示例
2020/12/03 Python
python中@contextmanager实例用法
2021/02/07 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
迎元旦广播稿
2014/02/22 职场文书
庆国庆活动总结
2014/08/28 职场文书
表彰大会新闻稿
2015/07/17 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
mysql如何查询连续记录
2022/05/11 MySQL