乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      再談js拖拽(二)仿iGoogle自定義首頁(yè)模塊拖拽

       quasiceo 2015-06-26

        首先這篇文章是基于 再談js拖拽(一) code基礎(chǔ)上的,進(jìn)行改動(dòng)實(shí)現(xiàn)的仿iGoogle自定義首頁(yè)模塊拖拽功能。將code貼上,你也可在下方進(jìn)行下載。code未免枯燥,我將盡量用文字描述思路及注意點(diǎn),所以即便你不看code也能根據(jù)文字翻譯成你的code。

       

      復(fù)制代碼
      代碼
      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2  <html xmlns="http://www./1999/xhtml" >
      3  <head>
      4 <title></title>
      5 <script type="text/javascript">
      6 var Common = {
      7 getEvent: function() {//ie/ff
      8   if (document.all) {
      9 return window.event;
      10 }
      11 func = getEvent.caller;
      12 while (func != null) {
      13 var arg0 = func.arguments[0];
      14 if (arg0) {
      15 if ((arg0.constructor == Event || arg0.constructor == MouseEvent) || (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) {
      16 return arg0;
      17 }
      18 }
      19 func = func.caller;
      20 }
      21 return null;
      22 },
      23 getMousePos: function(ev) {
      24 if (!ev) {
      25 ev = this.getEvent();
      26 }
      27 if (ev.pageX || ev.pageY) {
      28 return {
      29 x: ev.pageX,
      30 y: ev.pageY
      31 };
      32 }
      33
      34 if (document.documentElement && document.documentElement.scrollTop) {
      35 return {
      36 x: ev.clientX + document.documentElement.scrollLeft - document.documentElement.clientLeft,
      37 y: ev.clientY + document.documentElement.scrollTop - document.documentElement.clientTop
      38 };
      39 }
      40 else if (document.body) {
      41 return {
      42 x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
      43 y: ev.clientY + document.body.scrollTop - document.body.clientTop
      44 };
      45 }
      46 },
      47 getElementPos: function(el) {
      48 el = this.getItself(el);
      49 var _x = 0, _y = 0;
      50 do {
      51 _x += el.offsetLeft;
      52 _y += el.offsetTop;
      53 } while (el = el.offsetParent);
      54 return { x: _x, y: _y };
      55 },
      56 getItself: function(id) {
      57 return "string" == typeof id ? document.getElementById(id) : id;
      58 },
      59 getViewportSize: { w: (window.innerWidth) ? window.innerWidth : (document.documentElement && document.documentElement.clientWidth) ? document.documentElement.clientWidth : (document.body?document.body.offsetWidth:0), h: (window.innerHeight) ? window.innerHeight : (document.documentElement && document.documentElement.clientHeight) ? document.documentElement.clientHeight : (document.body ? document.body.offsetHeight : 0) },
      60 isIE: document.all ? true : false,
      61 setOuterHtml: function(obj, html) {
      62 var Objrange = document.createRange();
      63 obj.innerHTML = html;
      64 Objrange.selectNodeContents(obj);
      65 var frag = Objrange.extractContents();
      66 obj.parentNode.insertBefore(frag, obj);
      67 obj.parentNode.removeChild(obj);
      68 },
      69 firstChild: function(parentObj, tagName) {
      70 if (Common.isIE) {
      71 return parentObj.firstChild;
      72 }
      73 else {
      74 var arr = parentObj.getElementsByTagName(tagName);
      75 return arr[0];
      76 }
      77 },
      78 lastChild: function(parentObj, tagName) {
      79 if (Common.isIE) {
      80 return parentObj.lastChild;
      81 }
      82 else {
      83 var arr = parentObj.getElementsByTagName(tagName);
      84 return arr[arr.length - 1];
      85 }
      86 },
      87 setCookie: function(name, value) {
      88 document.cookie = name + "=" + value;
      89 },
      90 getCookie: function(name) {
      91 var strCookie = document.cookie;
      92 var arrCookie = strCookie.split("; ");
      93 for (var i = 0; i < arrCookie.length; i++) {
      94 var arr = arrCookie[i].split("=");
      95 if (!arr[1]) {
      96 return "";
      97 }
      98 if (arr[0] == name) {
      99 return arr[1];
      100 }
      101 }
      102 return "";
      103 },
      104 delCookie: function(name) {
      105 var exp = new Date();
      106 exp.setTime(exp.getTime() - 1);
      107 var cval = this.getCookie(name);
      108 if (cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
      109 }
      110 }
      111
      112 ///------------------------------------------------------------------------------------------------------
      113   var Class = {
      114 create: function() {
      115 return function() { this.init.apply(this, arguments); }
      116 }
      117 }
      118 var Drag = Class.create();
      119 Drag.prototype = {
      120 init: function(titleBar, dragDiv, Options) {
      121 //設(shè)置點(diǎn)擊是否透明,默認(rèn)透明60%
      122   titleBar = Common.getItself(titleBar);
      123 dragDiv = Common.getItself(dragDiv);
      124 this.dragArea = { maxLeft: -9999, maxRight: 9999, maxTop: -9999, maxBottom: 9999 };
      125 if (Options) {
      126 this.opacity = Options.opacity ? (isNaN(parseInt(Options.opacity)) ? 100 : parseInt(Options.opacity)) : 100;
      127 if (Options.area) {
      128 if (Options.area.left && !isNaN(parseInt(Options.area.left))) { this.dragArea.maxLeft = Options.area.left };
      129 if (Options.area.right && !isNaN(parseInt(Options.area.right))) { this.dragArea.maxRight = Options.area.right };
      130 if (Options.area.top && !isNaN(parseInt(Options.area.top))) { this.dragArea.maxTop = Options.area.top };
      131 if (Options.area.bottom && !isNaN(parseInt(Options.area.bottom))) { this.dragArea.maxBottom = Options.area.bottom };
      132 }
      133 }
      134 else {
      135 this.opacity = 60;
      136 }
      137 this.originDragDiv = null;
      138 this.tmpX = 0;
      139 this.tmpY = 0;
      140 this.moveable = false;
      141 this.dragArray = [];
      142
      143 var dragObj = this;
      144 var dragTbl = document.getElementById("dragTable");
      145
      146 titleBar.onmousedown = function(e) {
      147 var ev = e || window.event || Common.getEvent();
      148 //只允許通過(guò)鼠標(biāo)左鍵進(jìn)行拖拽,IE鼠標(biāo)左鍵為1 FireFox為0
      149   if (Common.isIE && ev.button == 1 || !Common.isIE && ev.button == ground-color: #f5f5f5; color: #000000;">0) {
      150 }
      151 else {
      152 return false;
      153 }
      154
      155
      156 //處理特殊情況:在最上/下面MOVE時(shí)不碰到現(xiàn)有DIV的情況下,又回到起始拖拽的列最上/下方
      157   var tmpColId;
      158 for (c = 0; c < dragTbl.rows[0].cells.length; c++) {
      159 for (k = 0; k < dragTbl.rows[0].cells[c].getElementsByTagName("DIV").length; k++) {
      160 if (dragDiv.id == dragTbl.rows[0].cells[c].getElementsByTagName("DIV")[k].id) {
      161 tmpColId = c;
      162 break;
      163 }
      164 }
      165 }
      166 var tmpPosFirstChild = Common.getElementPos(Common.firstChild(dragTbl.rows[0].cells[tmpColId], "DIV"));
      167 var tmpPosLastChild = Common.getElementPos(Common.lastChild(dragTbl.rows[0].cells[tmpColId], "DIV"));
      168 var tmpObj = { colId: tmpColId, firstChildUp: tmpPosFirstChild.y, lastChildDown: tmpPosLastChild.y + Common.lastChild(dragTbl.rows[0].cells[tmpColId], "DIV").offsetHeight };
      169
      170 //保存當(dāng)前可拖拽各容器的所在位置
      171   dragObj.dragArray = dragObj.RegDragsPos();
      172
      173 //插入虛線框
      174   var dashedElement = document.createElement("div");
      175 dashedElement.style.cssText = dragDiv.style.cssText;
      176 dashedElement.style.border = " dashed 2px #aaa ";
      177 dashedElement.style.marginBottom = "6px";
      178 dashedElement.style.width = dragDiv.offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) + "px"; //減去boderWidth使虛線框大小保持與dragDiv一致
      179   dashedElement.style.height = dragDiv.offsetHeight - 2 * parseInt(dashedElement.style.borderWidth) + "px"; //加上px 保證FF正確
      180   dashedElement.style.position = "relative";
      181 if (dragDiv.nextSibling) {
      182 dragDiv.parentNode.insertBefore(dashedElement, dragDiv.nextSibling);
      183 }
      184 else {
      185 dragDiv.parentNode.appendChild(dashedElement);
      186 }
      187 //拖動(dòng)時(shí)變?yōu)閍bsolute
      188   dragDiv.style.width = dragDiv.offsetWidth + "px";
      189 dragDiv.style.position = "absolute";
      190
      191
      192 dragObj.moveable = true;
      193 dragDiv.style.zIndex = dragObj.GetZindex() + 1;
      194
      195 var downPos = Common.getMousePos(ev);
      196 dragObj.tmpX = downPos.x - dragDiv.offsetLeft;
      197 dragObj.tmpY = downPos.y - dragDiv.offsetTop;
      198
      199 if (Common.isIE) {
      200 dragDiv.setCapture();
      201 } else {
      202 window.captureEvents(Event.mousemove);
      203 }
      204
      205 dragObj.SetOpacity(dragDiv, dragObj.opacity);
      206
      207 //FireFox 去除容器內(nèi)拖拽圖片問(wèn)題
      208   if (ev.preventDefault) {
      209 ev.preventDefault();
      210 ev.stopPropagation();
      211 }
      212
      213 document.onmousemove = function(e) {
      214 if (dragObj.moveable) {
      215 var ev = e || window.event ||t;background-color: #f5f5f5; color: #000000;"> Common.getEvent();
      216 //IE 去除容器內(nèi)拖拽圖片問(wèn)題
      217   if (document.all) //IE
      218 {
      219 ev.returnValue = false;
      220 }
      221
      222 var movePos = Common.getMousePos(ev);
      223 dragDiv.style.left = Math.max(Math.min(movePos.x - dragObj.tmpX, dragObj.dragArea.maxRight), dragObj.dragArea.maxLeft) + "px";
      224 dragDiv.style.top = Math.max(Math.min(movePos.y - dragObj.tmpY, dragObj.dragArea.maxBottom), dragObj.dragArea.maxTop) + "px";
      225
      226 var targetDiv = null;
      227 for (var k = 0; k < dragObj.dragArray.length; k++) {
      228 if (dragDiv == dragObj.dragArray[i]) {
      229 continue;
      230 }
      231
      232 if (movePos.x > dragObj.dragArray[k].PosLeft && movePos.x < dragObj.dragArray[k].PosLeft + dragObj.dragArray[k].PosWidth
      233 && movePos.y > dragObj.dragArray[k].PosTop && movePos.y < dragObj.dragArray[k].PosTop + dragObj.dragArray[k].PosHeight
      234 ) {
      235 targetDiv = document.getElementById(dragObj.dragArray[k].DragId);
      236 if (movePos.y < dragObj.dragArray[k].PosTop + dragObj.dragArray[k].PosHeight / 2) {
      237 //往上移
      238 dashedElement.style.width = targetDiv.offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) + "px";
      239 targetDiv.parentNode.insertBefore(dashedElement, targetDiv);
      240 }
      241 else {
      242 //往下移
      243 dashedElement.style.width = targetDiv.offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) + "px";
      244 if (targetDiv.nextSibling) {
      245 targetDiv.parentNode.insertBefore(dashedElement, targetDiv.nextSibling);
      246 }
      247 else {
      248 targetDiv.parentNode.appendChild(dashedElement);
      249 }
      250 }
      251 }
      252 }
      253
      254 for (j = 0; j < dragTbl.rows[0].cells.length; j++) {
      255 var startLeft = Common.getElementPos(dragTbl.rows[0].cells[j]).x;
      256 if (movePos.x > startLeft && movePos.x < startLeft + dragTbl.rows[0].cells[j].offsetWidth) {
      257 ///列無(wú)DIV
      258 if (dragTbl.rows[0].cells[j].getElementsByTagName("div").length == 0) {
      259 dashedElement.style.width = dragTbl.rows[0].cells[j].offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) + "px";
      260 dragTbl.rows[0].cells[j].appendChild(dashedElement);
      261 }
      262 else {
      263 var posFirstChild = Common.getElementPos(Common.firstChild(dragTbl.rows[0].cells[j], "DIV"));
      264 var posLastChild = Common.getElementPos(Common.lastChild(dragTbl.rows[0].cells[j], "DIV"));
      265 //處理特殊情況:在最上/下面MOVE時(shí)不碰到現(xiàn)有DIV的情況下,又回到起始拖拽的列最上/下方
      266 var tmpUp, tmpDown;
      267 if (tmpObj.colId == j) {
      268 tmpUp = tmpObj.firstChildUp;
      269 tmpDown = tmpObj.lastChildDown;
      270 }
      271 else {
      272 tmpUp = posFirstChild.y;
      273 tmpDown = posLastChild.y + Common.lastChild(dragTbl.rows[0].cells[j], "DIV").offsetHeight;
      274 }
      275
      276 if (movePos.y < tmpUp) {///從最上面插入虛線框
      277 dashedElement.style.width = Common.firstChild(dragTbl.rows[0].cells[j], "DIV").offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) + "px";
      278 dragTbl.rows[0].cells[j].insertBefore(dashedElement, Common.firstChild(dragTbl.rows[0].cells[j], "DIV"));
      279 }
      280 else if (movePos.y > tmpDown) {///從最下面插入虛線框
      281 dashedElement.style.width = Common.lastChild(dragTbl.rows[0].cells[j], "DIV").offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) + "px";
      282 dragTbl.rows[0].cells[j].appendChild(dashedElement);
      283 }
      284
      285 }
      286 }
      287 }
      288 }
      289 };
      290
      291 document.onmouseup = function() {
      292 if (dragObj.moveable) {
      293 if (Common.isIE) {
      294 dragDiv.releaseCapture();
      295 }
      296 else {
      297 window.releaseEvents(dragDiv.mousemove);
      298 }
      299 dragObj.SetOpacity(dragDiv, 100);
      300 dragObj.moveable = false;
      301 dragObj.tmpX = 0;
      302 dragObj.tmpY = 0;
      303
      304 //務(wù)必寫(xiě)在此IF內(nèi)
      305 dragDiv.style.left = "";
      306 dragDiv.style.top = "";
      307 dragDiv.style.width = "";
      308 dragDiv.style.position = "";
      309 dashedElement.parentNode.insertBefore(dragDiv, dashedElement);
      310 dashedElement.parentNode.removeChild(dashedElement);
      311 }
      312
      313 };
      314
      315 }
      316 },
      317 SetOpacity: function(dragDiv, n) {
      318 if (Common.isIE) {
      319 dragDiv.filters.alpha.opacity = n;
      320 }
      321 else {
      322 dragDiv.style.opacity = n / 100;
      323 }
      324
      325 },
      326 GetZindex: function() {
      327 var maxZindex = 0;
      328 var divs = document.getElementsByTagName("div");
      329 for (z = 0; z < divs.length; z++) {
      330 maxZindex = Math.max(maxZindex, divs[z].style.zIndex);
      331 }
      332 return maxZindex;
      333 },
      334 RegDragsPos: function() {
      335 var arrDragDivs = new Array();
      336 var dragTbl = document.getElementById("dragTable");
      337 var tmpDiv, tmpPos;
      338 for (i = 0; i < dragTbl.getElementsByTagName("div").length; i++) {
      339 tmpDiv = dragTbl.getElementsByTagName("div")[i];
      340 if (tmpDiv.className = "dragDiv") {
      341 tmpPos = Common.getElementPos(tmpDiv);
      342 arrDragDivs.push({ DragId: tmpDiv.id, PosLeft: tmpPos.x, PosTop: tmpPos.y, PosWidth: tmpDiv.offsetWidth, PosHeight: tmpDiv.offsetHeight });
      343 }
      344 }
      345 return arrDragDivs;
      346 }
      347 }
      348
      349 window.onload = function() {
      350 var dragTbl = document.getElementById("dragTable");
      351 if (Common.getCookie("configArr")) {
      352 var configArr = eval("(" + Common.getCookie("configArr") + ")");
      353 for (i = 0; i < dragTbl.rows[0].cells.length; i++) {
      354 for (j = 0; j < configArr[i].length; j++) {
      355 dragTbl.rows[0].cells[i].appendChild(document.getElementById(configArr[i][j]));
      356 }
      357 }
      358 }
      359 new Drag("titleBar1", "dragDiv1");
      360 new Drag("titleBar2", "dragDiv2");
      361 new Drag("titleBar3", "dragDiv3");
      362 new Drag("titleBar4", "dragDiv4");
      363 new Drag("titleBar5", "dragDiv5");
      364 }
      365
      366 window.onunload = function() {
      367 var dragTbl = document.getElementById("dragTable");
      368 var configArr = "";
      369 for (i = 0; i < dragTbl.rows[0].cells.length; i++) {
      370 var tmpStr = "";
      371 for (j = 0; j < dragTbl.rows[0].cells[i].getElementsByTagName("DIV").length; j++) {
      372 tmpStr += (tmpStr == "" ? "" : ",") + "'" + dragTbl.rows[0].cells[i].getElementsByTagName("DIV")[j].id + "'";
      373 }
      374 configArr += (configArr == "" ? "" : ",") + "[" + tmpStr + "]";
      375 }
      376 //format like: [['dragDiv3','dragDiv5'],['dragDiv4','dragDiv1'],['dragDiv2']]
      377 Common.setCookie("configArr", "[" + configArr + "]");
      378 }
      379 </script>
      380 <style type="text/css">
      381 .spanDiv{
      382 position:relative;
      383 width:5px;
      384 height:5px;
      385 }
      386
      387 .dragDiv,.nodragDiv{
      388 position:relative;
      389 filter:alpha(opacity=100);
      390 opacity:1;
      391 margin-bottom:6px;
      392 background-color:#FFFFFF;
      393 }
      394 </style>
      395 </head>
      396 <body >
      397 <script type="text/javascript">
      398
      399 </script>
      400 <table id="dragTable" cellpadding="3" style=" border:solid 0px green;width:98%;">
      401 <tr>
      402 <td valign="top" style="width:30%">
      403 <div class="dragDiv" id="dragDiv1" >
      404 <table cellpadding="0" cellspacing="0" border="1" style="width:100%;border-collapse:collapse; border-color:Blue">
      405 <tr id="titleBar1" style="height:22px; text-align:left; background-color:#547BC9;color:White; padding:3px;cursor:move;">
      406 <th align="left" unselectable="on" >Title1</th>
      407 </tr>
      408 <tr style="height:130px;padding:3px;" align="left" valign="top" >
      409 <td unselectable="on">Content1...</td>
      410 </tr>
      411 </table>
      412 </div>
      413 <div class="dragDiv" id="dragDiv2">
      414 <table cellpadding="0" cellspacing="0" border="1" style="width:100%;border-collapse:collapse; border-color:Blue">
      415 <tr id="titleBar2" style="height:22px; text-align:left; background-color:#547BC9;color:White; padding:3px;cursor:move;">
      416 <th align="left" unselectable="on" >Title2</th>
      417 </tr>
      418 <tr style="height:130px;padding:3px;" align="left" valign="top" >
      419 <td unselectable="on">Content2...</td>
      420 </tr>
      421 </table>
      422 </div>
      423 </td>
      424 <td valign="top" style="width:50%">
      425 <div class="dragDiv" id="dragDiv3">
      426 <table cellpadding="0" cellspacing="0" border="1" style="width:100%;border-collapse:collapse; border-color:Blue">
      427 <tr id="titleBar3" style="height:22px; text-align:left; background-color:#547BC9;color:White; padding:3px;cursor:move;">
      428 <th align="left" unselectable="on" >Title3</th>
      429 </tr>
      430 <tr style="height:230px;padding:3px;" align="left" valign="top" >
      431 <td unselectable="on">Content3...</td>
      432 </tr>
      433 </table>
      434 </div>
      435 </td>
      436 <td valign="top" style="width:20%">
      437 <div class="dragDiv" id="dragDiv4">
      438 <table cellpadding="0" cellspacing="0" border="1" style="width:100%;border-collapse:collapse; border-color:Blue">
      439 <tr id="titleBar4" style="height:22px; text-align:left; background-color:#547BC9;color:White; padding:3px;cursor:move;">
      440 <th align="left" unselectable="on" >Title4</th>
      441 </tr>
      442 <tr style="height:130px;padding:3px;" align="left" valign="top" >
      443 <td unselectable="on">Content4...</td>
      444 </tr>
      445 </table>
      446 </div>
      447 <div class="dragDiv" id="dragDiv5">
      448 <table cellpadding="0" cellspacing="0" border="1" style="width:100%;border-collapse:collapse; border-color:Blue">
      449 <tr id="titleBar5" style="height:22px; text-align:left; background-color:#547BC9;color:White; padding:3px;cursor:move;">
      450 <th align="left" unselectable="on" >Title5</th>
      451 </tr>
      452 <tr style="height:130px;padding:3px;" align="left" valign="top" >
      453 <td unselectable="on">Content5...</td>
      454 </tr>
      455 </table>
      456 </div>
      457 </td>
      458 </tr>
      459 </table>
      460 </body>
      461 </html>
      462
      復(fù)制代碼

       

       

      1. 準(zhǔn)備

      1.1 由于模塊拖拽中使用虛線框,所以去除(一)中拖拽的保持原有DIV的功能(即keepOrigin);
      1.2 在新建Drag對(duì)象時(shí)如未設(shè)置拖拽時(shí)透明值,默認(rèn)改為60%的透明度;

      1.3 將拖拽范圍上下左右默認(rèn)設(shè)置為9999,因?yàn)槟K拖拽超過(guò)當(dāng)前可視窗口是必要的。

      1.4 在(一)中有個(gè)BUG,即用IE第一次打開(kāi)頁(yè)面報(bào)缺少對(duì)象的錯(cuò),如要重現(xiàn),右鍵文件選擇IE打開(kāi),刷新后或者將文件拖到已有IE瀏覽器中無(wú)法重現(xiàn)。原因Common.getViewportSize中有document.body.offsetWidth,IE中第一次打開(kāi),當(dāng)解析到這句時(shí),document.body不存在,所以取offsetWidth時(shí)錯(cuò)誤。所以要么把這段放到body標(biāo)簽中,要么進(jìn)行對(duì)document.body的判斷。

      1.5 HTML結(jié)構(gòu):這里使用的是Table,在TD中存放要拖拽的DIV。當(dāng)然也可以全部用DIV布局。但是拖拽的DIV的postion要設(shè)為relative,因?yàn)樗窃谖臋n流中的,absolute則是脫離文檔流。

       

      2. 思路及注意點(diǎn)

      2.1 在mouseDown時(shí),插入虛線框DIV,這里要注意設(shè)置虛線框的position為relative,插入到當(dāng)前拖拽DIV所處列的文檔流中,同時(shí)把當(dāng)前拖拽DIV的position改為absolute,使脫離文檔流來(lái)進(jìn)行拖拽。虛線框DIV的寬度要注意減去2倍的boderWidth,否則虛線框?qū)未螽?dāng)前列,造成文檔布局移位。同時(shí),保證插入虛線框DIV的code要在賦當(dāng)前拖拽DIV的ZIndex值前面,以保證當(dāng)前拖拽DIV的ZIndex最大。

      2.2 在mouseUp時(shí),插入當(dāng)前拖拽DIV至虛線框前,將當(dāng)前拖拽DIV的position、left、top、width清空,進(jìn)入文檔流。然后刪除虛線框。

      2.3 模塊自定義拖拽的核心操作即在mouseMove時(shí)。
      2.3.1 首先是虛線框的高度寬度處理,我的處理是高度保持不變,寬度取所移動(dòng)到當(dāng)前列的寬度。
      2.3.2 然后核心問(wèn)題是:什么時(shí)候讓虛線框移動(dòng)到什么位置。

      我的處理是:拿當(dāng)前拖拽中的鼠標(biāo)位置與頁(yè)面可拖拽的各DIV的絕對(duì)位置進(jìn)行比較。所以在mouseDown時(shí)還要記住當(dāng)前頁(yè)面可拖拽DIV的絕對(duì)位置和寬度高度(RegDragsPos方法中),存入數(shù)組。
      當(dāng)拖拽中鼠標(biāo)進(jìn)入某DIV區(qū)域內(nèi),如在該DIV上半部,則虛線框插到該DIV的上方,如在下半部則插在下方。
      當(dāng)拖拽中鼠標(biāo)并未觸及某具體DIV區(qū)域內(nèi),在外部游離時(shí),則首先判斷處于那一列范圍內(nèi),然后如果該列沒(méi)有可拖拽DIV,則虛線框直接插入該列;若該列有DIV,則判斷鼠標(biāo)位置處于該列第一個(gè)DIV上方,則往上插,處于該列最下面DIV下方,則往下插。至此所有可能情況均處理。
      有一特殊情況,譬如,當(dāng)前拖拽DIV在最上方游離,鼠標(biāo)不碰及任何DIV,從第一列開(kāi)始,移動(dòng)到第二第三列虛線框插入均正常,但是回到第一列時(shí)發(fā)現(xiàn)無(wú)法插入。因?yàn)榇藭r(shí)當(dāng)前拖拽的DIV仍然作為第一列的第一個(gè)DIV,在判斷是否位于該列第一個(gè)DIV上方時(shí)不符合條件無(wú)法執(zhí)行虛線框插入的操作。所以在mouseDown時(shí)臨時(shí)記下該列第一個(gè)DIV的top和最后一個(gè)DIV 下沿絕對(duì)位置,以此比較。

      對(duì)于什么時(shí)候讓虛線框移動(dòng)到什么位置,IGoogle以前版本的處理是:找到取距離當(dāng)前鼠標(biāo)位置這點(diǎn)最近的可拖拽DIV(取最短的兩點(diǎn)間距離),然后讓虛線框插入該DIV處?,F(xiàn)在版本不清楚怎么做的。

       

      3.拖拽之后保存當(dāng)前模塊布局,使刷新頁(yè)面仍保持自定義的模塊布局。
      其實(shí)是在window.onunload中用cookie記下當(dāng)前布局狀態(tài),如: [['dragDiv3','dragDiv5'],['dragDiv4','dragDiv1'],['dragDiv2']] 。window.onload中去布局。實(shí)際應(yīng)用中可以將此插入后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行保存。

       

      over了,貌似啰嗦啊,哎。接下來(lái)我將寫(xiě)關(guān)于js動(dòng)畫(huà)特效的系列,給自己布置點(diǎn)任務(wù)先。

      點(diǎn)擊下載


      作者:JayChow
      出處:http://ljchow.cnblogs.com
      本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,請(qǐng)?jiān)谖恼马?yè)面明顯位置給出原文鏈接。

      ----------------華麗麗分隔線下是懶人的快速回復(fù)----------------

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多