Natural

 

利用js实现仿google的个性化定制

最近需要实现一个仿google的个性化定制;既对窗口的模块可以拖放,创建新的窗口模块。。。
网上实现窗口拖放效果的例子也有不少。
本人找个了个baseball的例子,利用它的拖放框架增加了创建新窗口的动态模块,拖放后的窗口位置的保存功能……
即读取到显示的box模块的id、位置、resultId(前台页面异步显示时返回结果的div的id);对新建的box则需要读取box的id、标题、位置、resultId、定制的模块(下拉菜单选中的值)。。
只需把这两个返回的字符串提交给后台处理,保存的数据库即可。。。前台显示数据时直接读取数据库中的信息、利用ajax异步载入到页面即可。
记录一下以备后用。
这是html中所引用的js文件

  1 <html>
  2 <head>
  3 <title></title>
  4 <style>
  5 body{ padding:0; margin:0;}
  6 .box{border:1px dashed #ccc; margin-bottom:8px; overflow:hidden; height:100%; clear:both;font-size:12px; }
  7 .box p{ padding:5px; margin:0;}
  8 .box .basebat{ margin:0; padding:5px; background:#e1e1e1;font-size:12px; color:#333333; background:#f1f1f1; border-bottom:1px dashed #ccc;cursor:move; }
  9 .box .basebat .f_r{ float:right; cursor:pointer; font-weight:normal;}
 10 .warp{ width:820px; margin:0 auto;font-size:12px;}
 11 #left{ width:200px; float:left;}
 12 #center{ width:400px;margin-left:10px;float:left;}
 13 #right{ width:200px; float:right;}
 14 </style>
 15 <script type="text/javascript" src="jquery-1.3.2.min.js"></script>
 16 <script type="text/javascript" src="popbaseball.min.js"></script>
 17 <script type="text/javascript" src="prototype.js"></script>
 18
 19 <script type="text/javascript">
 20 function dragDiv()
 21 {
 22     jQuery(document).ready(function(){
 23         jQuery.baseball({
 24             accepter:"#left,#center,#right",
 25             target:".box",    
 26             handle:".basebat"
 27             })
 28     })
 29 }
 30 
 31 //保存box的布局
 32 function saveDivs(){
 33     var objdoc = document.getElementsByTagName("h1");
 34      var divsNames = '';
 35       for(i=0;i<objdoc.length;i++)
 36       {
 37           if(objdoc[i].className == "basebat"&&objdoc[i].parentNode.style.display=="")
 38         {
 39             divsNames += objdoc[i].parentNode.id + '-';
 40             divsNames += objdoc[i].parentNode.parentNode.id+ '-';
 41             divsNames += objdoc[i].nextSibling.id+'|';
 42         }
 43       }
 44       alert(divsNames);
 45 }
 46 
 47 //保存新增的box
 48 function saveNewBoxs(){
 49     var objdoc = document.getElementsByTagName("h1");
 50      var divsNames = '';
 51 
 52       for(i=0;i<objdoc.length;i++
 53       {
 54           if( objdoc[i].className == "basebat"
 55               &&objdoc[i].parentNode.style.display==""
 56               &&objdoc[i].childNodes.length == 2                //新增box里标题栏里有两个节点
 57               &&objdoc[i].nextSibling.childNodes.length >3     //新增box的内容里有4个节点;大于3可以甄选出新增的box
 58           )
 59         {
 60             divsNames += objdoc[i].parentNode.id + '-';        //新增box的id
 61             divsNames += objdoc[i].nextSibling.id+'-';        //新增box的用于ajax返回result的id
 62             
 63             var subNodes = objdoc[i].nextSibling.childNodes;
 64             //获取box的标题
 65             for(var j=0;j< subNodes.length;j++)
 66             {
 67                 var field = subNodes;
 68                 var fieldType = field[j].nodeName.toLowerCase();
 69                 if(fieldType=="input")
 70                 {  
 71                     divsNames += field[j].value +'-';
 72                   }
 73              }
 74              //获取box下拉菜单的选中项
 75              for(var j=0;j< subNodes.length;j++)
 76             {
 77                 var field = subNodes;
 78                 var fieldType = field[j].nodeName.toLowerCase();
 79                   if(fieldType=="select")
 80                 {  
 81                     divsNames += field[j].value +'|';
 82                   }
 83              }
 84         }
 85       }
 86       alert(divsNames);
 87 }
 88 
 89 //隐藏或显示box
 90 function switchDivState(d){
 91     var Objdoc_ = $(d+'_');
 92     if(Objdoc_.checked){
 93         var Objdoc = $(d);
 94          Objdoc.style.display="";  
 95     }else{
 96          var Objdoc = $(d);
 97          Objdoc.style.display="none";  
 98     }
 99 }
100 //隐藏box
101 function closeDiv(d){
102     var Objdoc_ = $(d+'_');
103     Objdoc_.checked="";
104     var Objdoc = $(d);
105     Objdoc.style.display="none";
106 }
107 //关闭box——关了之后无法再重新显示
108 function justCloseDiv(d){
109     var Objdoc =$(d);
110     Objdoc.style.display="none";
111 }
112 
113 //编辑box的标题
114 function editDivTitle(titleId,obj)
115 {
116     $(titleId).innerHTML=obj.value;
117 }
118 
119 //box的编辑栏
120 function editDiv(divId,resultId)
121 {
122     var divTitle = 'title' + Math.random();
123     var defaultTitleName = "new title";
124     var defText1 = "编辑标题:";
125     
126     $(divId).innerHTML = "<h1 class=\"basebat\"><span class=\"f_r\" onclick=\"JavaScript:justCloseDiv(\'"+divId+"\')\">关闭</span><div id=\""+divTitle+"\">"+defaultTitleName+"</div></h1><div id=\""+resultId+"\">"
127     +defText1+"<input class=\"text\" type=\"text\" onkeyup=\"editDivTitle(\'"+divTitle+"\',this)\" value=\""+defaultTitleName+"\"/>"
128     +"内容:<select ><option value=\"\" selected></option><option value=\"0\">使用中</option><option value=\"1\">废弃</option></select>"
129     +"</div>";
130     
131     dragDiv();
132 }
133 
134 //增加一个box
135 function addNewDiv()
136 {
137     var thisDiv = $("center");
138     
139     var newDivIdName = 'div'+Math.random();
140     var resultDivIdName = 'result'+Math.random();
141     var newDiv = document.createElement("div");
142     newDiv.setAttribute("id",newDivIdName);
143     newDiv.setAttribute("class","box");
144     
145     thisDiv.appendChild(newDiv);
146     
147     $(newDivIdName).innerHTML= "<h1 class=\"basebat\">new title<span class=\"f_r\" onclick=\"JavaScript:justCloseDiv(\'"+newDivIdName+"\')\">关闭</span><span class=\"f_r\" onclick=\"JavaScript:editDiv(\'"+newDivIdName+"\',\'"+resultDivIdName+"\')\">编辑</span></h1><div id=\""+resultDivIdName+"\"></div>";
148     
149     dragDiv();
150 }
151 
152 /**
153 *ajax的异步载入
154 */
155 var loaded = '0';//载入结束标志
156 function getDivContent(myUrl,myParas,myResult)
157 {
158   var request_url= myUrl;                                               // 请求url
159   var request_pars = myParas+'&fresh=Math.random()';                    // 请求参数
160   var request_method = 'get';                                           // 请求方法
161   var myAjax = new Ajax.Updater(myResult, request_url,{
162                                   method     : request_method, 
163                                   parameters : request_pars, 
164                                   onFailure  : reportError,
165                                   onLoading  : loading,
166                                   onComplete : done,
167                                   evalScripts: true //允许执行返回内容中的脚本代码
168                                   
169   });
170 }
171 
172 function loading()
173 {
174     $('loading').style.display = 'block';
175     if(loaded == '1')
176         $('loading').style.display = 'none';
177 }
178 
179 function done()
180 {
181     $('loading').style.display = 'none';
182     loaded = '1';//载入结束
183 }
184 
185     
186 function reportError()
187 {
188   alert('Sorry. There was an error.');
189 }
190 </script>
191 </head>
192 <body onload="dragDiv()">
193 <div class="warp" style="border:1px solid #e1e1e1; width:818px; margin-top:8px;">
194     <div style=" padding:6px 10px;margin-bottom:8px; background:#f1f1f1; border-bottom:1px solid #e1e1e1;">首页模块管理</div>
195     <div style=" padding:10px;">
196     <input name="aa_" id="aa_" type="checkbox" value="TEST" checked="checked" onclick="JavaScript:switchDivState('aa')"/>  天气预报 
197     <input name="bb_" id="bb_" type="checkbox" value="" checked="checked" onclick="JavaScript:switchDivState('bb')"/>  搜索
198     <input name="cc_" id="cc_" type="checkbox" value="" checked="checked" onclick="JavaScript:switchDivState('cc')"/>  boxC 
199     <input name="dd_" id="dd_" type="checkbox" value="" checked="checked" onclick="JavaScript:switchDivState('dd')" /> boxD
200    <input name="save"  type="button" value="ajax" 
201    onclick="getDivContent('myWeather.jsp','','resultWeather');getDivContent('dmyGoogle.jsp','','resultGoogle')"/> 
202    <input name="save"  type="button" value="保存布局"  onclick="saveDivs();saveNewBoxs()"/> 
203    <input name="newDiv"  type="button" onclick="addNewDiv();" value="NEW DIV"/>
204    
205   </div>
206   <div style=" padding:10px;" id="loading" class="loading">载入中……</div>
207 </div>
208 <div style=" border-bottom:4px solid #e1e1e1; clear:both; height:14px; margin-bottom:14px; font-size:0;"></div>
209 <div class="warp">
210     <div id="left">
211         <div class="box" id="aa"><h1 class="basebat">天气预报<span class="f_r" onclick="JavaScript:closeDiv('aa')">关闭</span></h1><div id="resultWeather"></div></div>
212         <div class="box" id="bb"><h1 class="basebat">搜索<span class="f_r" onclick="JavaScript:closeDiv('bb')">关闭</span></h1><div id="resultGoogle"></div></div>
213     </div>
214     
215     <div id="center">
216         <div class="box" id="cc"><h1 class="basebat"><span class="f_r" onclick="JavaScript:closeDiv('cc')">关闭</span>boxC</h1><div id="resultCc"></div></div>
217     </div>
218     
219     <div id="right">
220         <div class="box" id="dd"><h1 class="basebat"><span class="f_r" onclick="JavaScript:closeDiv('dd')">关闭</span>boxD</h1><div id="resultCc"></div></div>
221     </div>
222 </body>
223 
224 </html>
225 



posted on 2010-03-31 21:45 此号已被删 阅读(1002) 评论(1)  编辑  收藏 所属分类: J2EEJavaScript

评论

# re: 利用js实现仿google的个性化定制[未登录] 2010-09-14 11:10 han

多谢分享,不过建议楼主换个高亮代码插件,这个都没有复制哦。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(8)

随笔分类(83)

随笔档案(78)

文章档案(2)

相册

收藏夹(7)

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜