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 此號已被刪 閱讀(1021) 評論(1)  編輯  收藏 所屬分類: J2EEJavaScript

          評論

          # re: 利用js實現仿google的個性化定制[未登錄] 2010-09-14 11:10 han

          多謝分享,不過建議樓主換個高亮代碼插件,這個都沒有復制哦。  回復  更多評論   

          導航

          統計

          常用鏈接

          留言簿(8)

          隨筆分類(83)

          隨筆檔案(78)

          文章檔案(2)

          相冊

          收藏夾(7)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 从江县| 镇原县| 河源市| 长汀县| 巴里| 遂溪县| 清新县| 右玉县| 盘山县| 阿克| 嘉义市| 广州市| 龙游县| 巴林左旗| 陆良县| 崇仁县| 邯郸市| 长寿区| 大石桥市| 甘谷县| 平度市| 镇远县| 安义县| 广州市| 理塘县| 沁源县| 浦江县| 修武县| 岐山县| 澄城县| 辛集市| 山阴县| 肇源县| 南康市| 武宁县| 介休市| 彩票| 连州市| 庆元县| 云霄县| 中西区|