拖动布局之保存布局页面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 相关文章推荐
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
Oct 29 Javascript
js如何获取file控件的完整路径具体实现代码
May 15 Javascript
JavaScript中的Math.LOG2E属性使用详解
Jun 14 Javascript
jQuery购物网页经典制作案例
Aug 19 Javascript
BootStrap实现手机端轮播图左右滑动事件
Oct 13 Javascript
js实现城市级联菜单的2种方法
Jun 23 Javascript
微信小程序自定义对话框弹出和隐藏动画
Jul 19 Javascript
详解微信小程序回到顶部的两种方式
May 09 Javascript
jQuery实现的解析本地 XML 文档操作示例
Apr 30 jQuery
聊聊JS ES6中的解构
Apr 29 Javascript
关于JavaScript轮播图的实现
Nov 20 Javascript
vue数据字典取键值项目的字典问题
Apr 12 Vue.js
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 三维饼图的实现代码
2008/09/28 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
List Installed Hot Fixes
2007/06/12 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
python实现简单中文词频统计示例
2017/11/08 Python
Python3连接SQLServer、Oracle、MySql的方法
2018/06/28 Python
Python中按值来获取指定的键
2019/03/04 Python
详解Python学习之安装pandas
2019/04/16 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
Pytorch释放显存占用方式
2020/01/13 Python
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
2014年环保局工作总结
2014/12/11 职场文书
2015年教研组工作总结
2015/05/04 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript