拖动布局之保存布局页面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鼠标经过不停滑动的问题
Mar 03 Javascript
浅谈JavaScript Math和Number对象
Jan 26 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
Mar 04 Javascript
JS实现可调整倒计时间代码分享
Aug 18 Javascript
Google Maps基础及实例解析
Aug 06 Javascript
Jil,高效的json序列化和反序列化库
Feb 15 Javascript
详解angularJs中关于ng-class的三种使用方式说明
Jun 02 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
Aug 24 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
Sep 30 Javascript
JS中注入eval, Function等系统函数截获动态代码
Apr 03 Javascript
js 闭包深入理解与实例分析
Mar 19 Javascript
ant-design-vue按需加载的坑的解决
May 14 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/03 冲泡冲煮
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
Yii核心验证器api详解
2016/11/23 PHP
jQuery代码优化 事件委托篇
2011/11/01 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
理解javascript闭包
2015/12/15 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
WebPack基础知识详解
2017/01/16 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
JS实现星星海特效
2019/12/24 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
python中ConfigParse模块的用法
2014/09/29 Python
python中星号变量的几种特殊用法
2016/09/07 Python
python如何获取服务器硬件信息
2017/05/11 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
python 重定向获取真实url的方法
2018/05/11 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
python 调整图片亮度的示例
2020/12/03 Python
幼儿园毕业园长感言
2014/02/24 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
JUnit5常用注解的使用
2021/07/02 Java/Android
Python面向对象编程之类的概念
2021/11/01 Python
JAVA springCloud项目搭建流程
2022/05/11 Java/Android