大帝AV在线一区二区三区_日韩精品一区二区三区中文_国产福利一区二区在线视频_国产在线观看一区二区三区精品

200

js拖拽建站程序例子

時間: 2013-05-27 14:09:52   點擊數: 76640   來源: 耐思智慧

js拖拽建站程序例子

  關于js拖拽早已是老生常談,網上一搜一大坨,但是有很多并不是很完善,或者兼容性不夠,或者功能不全,并且這樣的東西還是自己寫的好用。我打算在(一)中主要對js拖拽功能的注意點進行羅列,力求簡單;在(二)中利用(一)的拖拽去實現類似google個性化首頁的拖拽模塊功能。

  首先貼上完整code(IE/FF/Chrome)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title></title>
<script type="text/javascript">
var Common = {
getEvent: function() {//ie/ff
if (document.all) {
return window.event;
}
func = getEvent.caller;
while (func != null) {
var arg0 = func.arguments[0];
if (arg0) {
if ((arg0.constructor == Event || arg0.constructor == MouseEvent) || (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) {
return arg0;
}
}
func = func.caller;
}
return null;
},
getMousePos: function(ev) {
if (!ev) {
ev = this.getEvent();
}
if (ev.pageX || ev.pageY) {
return {
x: ev.pageX,
y: ev.pageY
};
}

if (document.documentElement && document.documentElement.scrollTop) {
return {
x: ev.clientX + document.documentElement.scrollLeft - document.documentElement.clientLeft,
y: ev.clientY + document.documentElement.scrollTop - document.documentElement.clientTop
};
}
else if (document.body) {
return {
x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y: ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
},
getItself: function(id) {
return "string" == typeof id ? document.getElementById(id) : id;
},
getViewportSize: { w: (window.innerWidth) ? window.innerWidth : (document.documentElement && document.documentElement.clientWidth) ? document.documentElement.clientWidth : document.body.offsetWidth, h: (window.innerHeight) ? window.innerHeight : (document.documentElement && document.documentElement.clientHeight) ? document.documentElement.clientHeight : document.body.offsetHeight },
isIE: document.all ? true : false,
setOuterHtml: function(obj, html) {
var Objrange = document.createRange();
obj.innerHTML = html;
Objrange.selectNodeContents(obj);
var frag = Objrange.extractContents();
obj.parentNode.insertBefore(frag, obj);
obj.parentNode.removeChild(obj);
}
}

///------------------------------------------------------------------------------------------------------
var Class = {
create: function() {
return function() { this.init.apply(this, arguments); }
}
}
var Drag = Class.create();
Drag.prototype = {
init: function(titleBar, dragDiv, Options) {
//設置點擊是否透明,默認不透明
titleBar = Common.getItself(titleBar);
dragDiv = Common.getItself(dragDiv);
this.dragArea = { maxLeft: 0, maxRight: Common.getViewportSize.w - dragDiv.offsetWidth - 2, maxTop: 0, maxBottom: Common.getViewportSize.h - dragDiv.offsetHeight - 2 };
if (Options) {
this.opacity = Options.opacity ? (isNaN(parseInt(Options.opacity)) ? 100 : parseInt(Options.opacity)) : 100;
this.keepOrigin = Options.keepOrigin ? ((Options.keepOrigin == true || Options.keepOrigin == false) ? Options.keepOrigin : false) : false;
if (this.keepOrigin) { this.opacity = 50; }
if (Options.area) {
if (Options.area.left && !isNaN(parseInt(Options.area.left))) { this.dragArea.maxLeft = Options.area.left };
if (Options.area.right && !isNaN(parseInt(Options.area.right))) { this.dragArea.maxRight = Options.area.right };
if (Options.area.top && !isNaN(parseInt(Options.area.top))) { this.dragArea.maxTop = Options.area.top };
if (Options.area.bottom && !isNaN(parseInt(Options.area.bottom))) { this.dragArea.maxBottom = Options.area.bottom };
}
}
else {
this.opacity = 100, this.keepOrigin = false;
}
this.originDragDiv = null;
this.tmpX = 0;
this.tmpY = 0;
this.moveable = false;

var dragObj = this;

titleBar.onmousedown = function(e) {
var ev = e || window.event || Common.getEvent();
//只允許通過鼠標左鍵進行拖拽,IE鼠標左鍵為1 FireFox為0
if (Common.isIE && ev.button == 1 || !Common.isIE && ev.button == 0) {
}
else {
return false;
}

if (dragObj.keepOrigin) {
dragObj.originDragDiv = document.createElement("div");
dragObj.originDragDiv.style.cssText = dragDiv.style.cssText;
dragObj.originDragDiv.style.width = dragDiv.offsetWidth;
dragObj.originDragDiv.style.height = dragDiv.offsetHeight;
dragObj.originDragDiv.innerHTML = dragDiv.innerHTML;
dragDiv.parentNode.appendChild(dragObj.originDragDiv);
}

dragObj.moveable = true;
dragDiv.style.zIndex = dragObj.GetZindex() + 1;
var downPos = Common.getMousePos(ev);
dragObj.tmpX = downPos.x - dragDiv.offsetLeft;
dragObj.tmpY = downPos.y - dragDiv.offsetTop;

titleBar.style.cursor = "move";
if (Common.isIE) {
dragDiv.setCapture();
} else {
window.captureEvents(Event.MOUSEMOVE);
}

dragObj.SetOpacity(dragDiv, dragObj.opacity);

//FireFox 去除容器內拖拽圖片問題
if (ev.preventDefault) {
ev.preventDefault();
ev.stopPropagation();
}

document.onmousemove = function(e) {
if (dragObj.moveable) {
var ev = e || window.event || Common.getEvent();
//IE 去除容器內拖拽圖片問題
if (document.all) //IE
{
ev.returnValue = false;
}

var movePos = Common.getMousePos(ev);
dragDiv.style.left = Math.max(Math.min(movePos.x - dragObj.tmpX, dragObj.dragArea.maxRight), dragObj.dragArea.maxLeft) + "px";
dragDiv.style.top = Math.max(Math.min(movePos.y - dragObj.tmpY, dragObj.dragArea.maxBottom), dragObj.dragArea.maxTop) + "px";

}
};

document.onmouseup = function() {
if (dragObj.keepOrigin) {
if (Common.isIE) {
dragObj.originDragDiv.outerHTML = "";
}
else {
Common.setOuterHtml(dragObj.originDragDiv, "");
}
}
if (dragObj.moveable) {
if (Common.isIE) {
dragDiv.releaseCapture();
}
else {
window.releaseEvents(Event.MOUSEMOVE);
}
dragObj.SetOpacity(dragDiv, 100);
titleBar.style.cursor = "default";
dragObj.moveable = false;
dragObj.tmpX = 0;
dragObj.tmpY = 0;
}
};
}
},
SetOpacity: function(dragDiv, n) {
if (Common.isIE) {
dragDiv.filters.alpha.opacity = n;
}
else {
dragDiv.style.opacity = n / 100;
}

},
GetZindex: function() {
var maxZindex = 0;
var divs = document.getElementsByTagName("div");
for (z = 0; z < divs.length; z++) {
maxZindex = Math.max(maxZindex, divs[z].style.zIndex);
}
return maxZindex;
}
}

window.onload = function() {
new Drag("dragDiv", "dragDiv", { opacity: 100, keepOrigin: true }); //, area: { left: 50, right: 500, top: 100, bottom: 400}
}
  

</script>

</head>
<body>
<div id="dragDiv" style="position:absolute; background-color:#FFFFFF;border:solid 1px #849BCA;width:200px;left:10px;top:10px;filter:alpha(opacity=100);opacity:1;">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%;border-collapse:collapse; ">
<tr id="titleBar" style="height:22px; text-align:left; background-color:#547BC9;color:White; padding:3px;">
<th align="left" unselectable="on" >Title</th>
</tr>
<tr style="height:130px;padding:3px;" align="left" valign="top" unselectable="on">
<td><img src="http://m.alapot.com/images/v4/logo.gif" alt="pic for drag" /> Content...</td> <!---->
</tr>
</table>
</div>
<div style="position:absolute; font-family:Tahoma;border:solid 1px #849BCA; background-color:#AAAAAA;width:200px;height:100px;left:210px;top:210px;filter:alpha(opacity=100);opacity:1; z-index:999">Are you able to cover me?</div>
</body>
</html>

對Drag的使用:在window.onload中,必填參數是titleBar和dragDiv,后者是要拖拽的容器,前者是拖拽容器的可拖拽部位,譬如經常遇到的通過標題欄拖動整個DIV,則titleBar即為改標題欄。而{ opacity: 100, keepOrigin: true , area: { left: 50, right: 500, top: 100, bottom: 400}} 是可選參數,用于擴展功能,opacity設置透明度,keepOrigin設置拖拽過程中是否保留原來拖拽容器,area設置拖拽范圍。

  1. 拖拽的基本原理:當mousedown時記下鼠標點擊位置離拖拽容器左邊沿的距離和上邊沿的距離,即tmpX,tmpY;mousemove時通過定位拖拽容器的style.left/style.top,使拖拽容器進行移動,定位到哪里則由剛剛的tmpX/tmpY和當前鼠標所在位置計算得出;mouseup時,結束移動。
  2. “var dragObj = this;” 這句是為了在mousedown/mouseup/mousemove事件里對Drag對象的相關變量進行引用。因為在mousedown/mouseup/mousemove里的this是window.
  3. 當拖拽速度太快導致鼠標移出拖拽容器,而拖拽容器位置未變,用document.mousemove代替titleBar.mousemove即可。
  4. 設置拖拽容器可拖拽的范圍,若未設置,則默認為當前窗口可視范圍。Note:在設置范圍的時候使用Math.max/min來處理,而不是用If語句判斷,用后者的話會導致快速拖拽時未達到容許范圍邊沿即停止的狀況。
  5. 當拖拽過程中,可設置是否保留原來拖拽容器,當拖拽結束,隱藏原來容器,默認不保留。
  6. 當拖拽時,可設置拖拽的容器是否透明及透明度多少,默認不透明。但若拖拽過程中設置保留原來拖拽容器,即keepOrigin: true,則設置透明度為50%。
  7. 使右鍵、鼠標中鍵等不能拖動,僅左鍵單擊可以拖動。Note:IE鼠標左鍵為event.Button=1 FireFox為event.Button=0.
  8. 解決如果點擊在圖片上無法拖拽的問題:非常杯具的是IE通過ev.cancelBubble=true;ev.returnValue = false;來防止圖片的事件,注意是放在document.onmousemove中,而FireFox通過ev.preventDefault();ev.stopPropagation(); 但是是放在titleBar的mousedown事件中。
  9. 有一種情況,當瀏覽器窗口不是最大化的時候,你希望當鼠標在瀏覽器外移動時,瀏覽器里的拖拽容器仍然移動,這時就要使用鼠標事件捕獲,IE中相應的是dragDiv.setCapture();與dragDiv.releaseCapture(); FF中是window.captureEvents(Event.MOUSEMOVE);與window.releaseEvents(Event.MOUSEMOVE) 。
  10. 確保每次拖拽時拖拽容器的zindex都不會被其他塊元素覆蓋。
上一篇:做論壇好還是做網站好 下一篇:網站建設中網站系統開發建設與管理的技術和方法

旗下網站:耐思智慧 - 淘域網 - 我的400電話 - 中文域名:耐思尼克.cn 耐思尼克.top

耐思智慧 © 版權所有 Copyright © 2000-2025 IISP.COM,Inc. All rights reserved

備案號碼: 粵ICP備09063828號  公安備案號: 公安備案 粵公網安備 44049002000123號  域名注冊服務機構許可:粵D3.1-20240003 CN域名代理自深圳萬維網

聲明:本網站中所使用到的其他各種版權內容,包括但不限于文章、圖片、視頻、音頻、字體等內容版權歸原作者所有,如權利所有人發現,請及時告知,以便我們刪除版權內容

本站程序界面、源代碼受相關法律保護, 未經授權, 嚴禁使用; 耐思智慧 © 為我公司注冊商標, 未經授權, 嚴禁使用

法律顧問:珠海知名律師 廣東篤行律師事務所 夏天風 律師

大帝AV在线一区二区三区_日韩精品一区二区三区中文_国产福利一区二区在线视频_国产在线观看一区二区三区精品

      9000px;">

          亚洲电影一区二区三区| 精品在线播放免费| 精品中文字幕一区二区小辣椒| 91精品国产一区二区三区| 久久99精品国产.久久久久 | 色老综合老女人久久久| 五月天久久比比资源色| 日韩精品综合一本久道在线视频| 国产伦精品一区二区三区免费迷| 国产精品国产三级国产| 欧美一区二区三区在线| 成人h版在线观看| 日本免费新一区视频| 中国色在线观看另类| 这里是久久伊人| av午夜精品一区二区三区| 男男gaygay亚洲| 一区二区三区中文字幕| 国产日韩av一区| 91精品一区二区三区久久久久久| 波多野结衣中文字幕一区| 美女在线一区二区| 亚洲午夜国产一区99re久久| 亚洲国产成人私人影院tom| 7777精品伊人久久久大香线蕉的 | 日韩精品在线一区| 在线精品国精品国产尤物884a| 国产一区二区日韩精品| 全部av―极品视觉盛宴亚洲| 亚洲男同1069视频| 国产欧美一区二区三区在线看蜜臀| 欧美精选午夜久久久乱码6080| 91在线精品一区二区三区| 国产高清成人在线| 国产精品综合久久| 国精产品一区一区三区mba桃花| 天天综合日日夜夜精品| 一级日本不卡的影视| 中文字幕一区二区三区四区不卡 | 国产亚洲欧美色| 日韩视频免费观看高清完整版在线观看 | 美女脱光内衣内裤视频久久网站| 久久午夜羞羞影院免费观看| 欧美久久久久中文字幕| 色综合色狠狠天天综合色| 国产成人小视频| 国产一区二区三区免费在线观看| 奇米777欧美一区二区| 亚洲大片免费看| 一区二区三区四区国产精品| 日韩毛片在线免费观看| 国产精品成人在线观看| 亚洲同性同志一二三专区| 国产精品美女久久久久久久久| 国产精品无遮挡| 一区精品在线播放| 亚洲精品高清在线| 亚洲成av人片在www色猫咪| 五月婷婷激情综合| 日韩国产欧美视频| 久久99蜜桃精品| 久久99精品国产91久久来源| 国产一区二区三区精品视频| 成人一道本在线| 91免费版pro下载短视频| 91碰在线视频| 精品视频全国免费看| 在线电影院国产精品| 日韩精品一区二区三区三区免费 | 国产精品国产三级国产三级人妇| 中文字幕第一区第二区| 国产精品久久免费看| 亚洲电影视频在线| 老司机精品视频在线| 粉嫩欧美一区二区三区高清影视| av资源网一区| 777xxx欧美| 中文幕一区二区三区久久蜜桃| 一二三四区精品视频| 蜜桃精品在线观看| 不卡区在线中文字幕| 91精品国产乱码| 日韩美女精品在线| 精一区二区三区| 欧美三区在线观看| 久久久一区二区| 性做久久久久久久免费看| 国产精品99久久久| 91.麻豆视频| 亚洲欧美一区二区三区孕妇| 美国精品在线观看| 在线亚洲一区观看| 国产欧美精品一区二区色综合朱莉 | 久久精品99国产精品日本| 国产高清无密码一区二区三区| 欧美喷潮久久久xxxxx| 中文字幕乱码亚洲精品一区| 麻豆国产欧美日韩综合精品二区| 色哟哟在线观看一区二区三区| 久久嫩草精品久久久久| 日本91福利区| 欧美日韩卡一卡二| 亚洲摸摸操操av| 国产69精品久久久久毛片| 精品区一区二区| 日韩影院免费视频| 在线观看精品一区| 亚洲综合成人在线| 色吧成人激情小说| 亚洲免费三区一区二区| av成人老司机| 综合婷婷亚洲小说| 99国产精品久| 亚洲欧美日韩国产成人精品影院 | 欧洲精品视频在线观看| 国产精品久久99| 97se狠狠狠综合亚洲狠狠| 中文字幕一区二区三区色视频| 国产福利一区二区| 中文字幕乱码日本亚洲一区二区| 国产一区二区精品在线观看| 精品日本一线二线三线不卡| 精品一二三四在线| 国产午夜精品久久久久久久| 成人网在线免费视频| 亚洲欧洲精品一区二区精品久久久| 国产91精品一区二区麻豆网站| 国产精品人妖ts系列视频| 不卡的av电影| 一区二区欧美国产| 51午夜精品国产| 久国产精品韩国三级视频| 欧美一区二区日韩| 国产精品99久| 亚洲欧美日韩国产另类专区| 色久优优欧美色久优优| 婷婷一区二区三区| 精品国产不卡一区二区三区| 国产一二三精品| 国产精品免费视频一区| 色94色欧美sute亚洲线路一久| 五月婷婷久久丁香| 精品国产电影一区二区| 成人福利视频在线| 亚洲成人777| 久久久www成人免费无遮挡大片| 国产999精品久久久久久绿帽| 亚洲激情成人在线| 欧美tickle裸体挠脚心vk| 97aⅴ精品视频一二三区| 日本不卡高清视频| 国产精品无码永久免费888| 色婷婷综合久久| 久久草av在线| 亚洲欧美国产三级| 日韩一区二区三区电影在线观看| 波多野结衣视频一区| 日韩高清中文字幕一区| 国产精品视频yy9299一区| 在线播放91灌醉迷j高跟美女 | 精品人伦一区二区色婷婷| 懂色av一区二区夜夜嗨| 五月综合激情网| 亚洲日本青草视频在线怡红院| 欧美一级夜夜爽| 一本色道久久加勒比精品| 日本成人超碰在线观看| 一区二区三区精品在线| 国产精品人人做人人爽人人添| 欧美不卡在线视频| 欧美综合亚洲图片综合区| 丰满放荡岳乱妇91ww| 蜜臀精品久久久久久蜜臀| 一区二区三区丝袜| 国产亚洲欧美日韩日本| 日韩精品中文字幕一区| 欧美三级午夜理伦三级中视频| 东方欧美亚洲色图在线| 韩国一区二区三区| 久久97超碰国产精品超碰| 日韩和欧美一区二区三区| 亚洲自拍偷拍网站| 一区二区在线观看视频在线观看| 国产精品网友自拍| 国产日韩精品一区二区浪潮av | 亚洲一区二区视频在线| 国产色一区二区| 久久理论电影网| 久久久99久久| 久久精品男人天堂av| 日本一区二区三区dvd视频在线| 2欧美一区二区三区在线观看视频| 欧美一区二区三区视频在线| 欧美一区二区三区影视| 欧美妇女性影城| 欧美一级生活片| 日韩欧美国产精品一区| 欧美大白屁股肥臀xxxxxx| 欧美精品一区男女天堂| 国产午夜一区二区三区|