拖动布局之保存布局页面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 相关文章推荐
jQuery开发者都需要知道的5个小技巧
Jan 08 Javascript
JavaScript Chart 插件整理
Jun 18 Javascript
jquery中通过过滤器获取表单元素的实现代码
Jul 05 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
Apr 17 Javascript
目前流行的JavaScript库的介绍及对比
Sep 29 Javascript
JavaScript按位运算符的应用简析
Feb 04 Javascript
分享10个优化代码的CSS和JavaScript工具
May 11 Javascript
Vue监听数组变化源码解析
Mar 09 Javascript
laydate 显示结束时间不小于开始时间的实例
Aug 11 Javascript
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
JavaScript面向对象继承原理与实现方法分析
Aug 09 Javascript
JS数组的常用10种方法详解
May 08 Javascript
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
改造一台复古桌面收音机
2021/03/02 无线电
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
CI框架的安全性分析
2016/05/18 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
JS Array对象入门分析
2008/10/30 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
Ext GridPanel加载完数据后进行操作示例代码
2014/06/17 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
详解vue v-model
2020/08/31 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
python统计一个文本中重复行数的方法
2014/11/19 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
Python之Class&amp;Object用法详解
2019/12/25 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
介绍下WebSphere的安全性
2013/01/31 面试题
秋季运动会通讯稿
2014/01/24 职场文书
青年教师培训方案
2014/02/06 职场文书
统计系教授推荐信
2014/02/28 职场文书
广告语设计及教案
2014/03/21 职场文书
党建工作整改措施
2014/10/28 职场文书
班主任寄语2015
2015/02/26 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
Hive日期格式转换方法总结
2022/06/25 数据库