📄 google_drag.js
字号:
//??????Util??????????
var Util = new Object();
//??http header???UserAgent??????
Util.getUserAgent = navigator.userAgent;
//???Gecko???Browser???Mozila?Firefox
Util.isGecko = Util.getUserAgent.indexOf("Gecko") != -1;
//???Opera
Util.isOpera = Util.getUserAgent.indexOf("Opera") != -1;
//????element?offset??????????Body?padding???????
//?????????true???offsetLeft?false??offsetTop
//??offset?style?client????????dindin??????http://www.jroller.com/page/dindin/?anchor=pro_javascript_12
Util.getOffset = function (el, isLeft) {
var retValue = 0;
while (el != null) {
retValue += el["offset" + (isLeft ? "Left" : "Top")];
el = el.offsetParent;
}
return retValue;
};
//???function?????funcName???fuction?????????element???????element???????????????????google?????
Util.bindFunction = function (el, fucName) {
return function () {
return el[fucName].apply(el, arguments);
};
};
//????????????element????????column?????????????????????????????
//??????????pagePosLeft?pagePosTop??????
Util.re_calcOff = function (el) {
for (var i = 0; i < Util.dragArray.length; i++) {
var ele = Util.dragArray[i];
ele.elm.pagePosLeft = Util.getOffset(ele.elm, true);
ele.elm.pagePosTop = Util.getOffset(ele.elm, false);
}
var nextSib = el.elm.nextSibling;
while (nextSib) {
nextSib.pagePosTop -= el.elm.offsetHeight;
nextSib = nextSib.nextSibling;
}
};
//??Google Ig????table????????????show??????????????????
Util.hide = function () {
Util.rootElement.style.display = "none";
};
//??Google Ig????table?????
Util.show = function () {
Util.rootElement.style.display = "";
};
//???????????
ghostElement = null;
//??????????dom????
getGhostElement = function () {
if (!ghostElement) {
ghostElement = document.createElement("DIV");
ghostElement.className = "modbox";
ghostElement.backgroundColor = "";
ghostElement.style.border = "2px dashed #aaa";
ghostElement.innerHTML = " ";
}
return ghostElement;
};
//????????Element??????????????
function draggable(el) {
//??????????
this._dragStart = start_Drag;
//??????????
this._drag = when_Drag;
//??????????
this._dragEnd = end_Drag;
//????????????????dom??
this._afterDrag = after_Drag;
//??????????????????
this.isDragging = false;
//???Element?this?????elm?????????????????????????????????
this.elm = el;
//?????Element????????div????????div
this.header = document.getElementById(el.id + "_h");
//???iframe?element??????????????
this.hasIFrame = this.elm.getElementsByTagName("IFRAME").length > 0;
//?????header???drag???event
if (this.header) {
//??????????
this.header.style.cursor = "move";
//??????header?element?this???????????
Drag.init(this.header, this.elm);
//???????????????????elemnt??????????????element?draggable????????
this.elm.onDragStart = Util.bindFunction(this, "_dragStart");
this.elm.onDrag = Util.bindFunction(this, "_drag");
this.elm.onDragEnd = Util.bindFunction(this, "_dragEnd");
}
};
//????draggable??????4?function
//??????????
function start_Drag() {
//?????????????????????????
Util.re_calcOff(this);
//????????????????????????
this.origNextSibling = this.elm.nextSibling;
//???????????????
var _ghostElement = getGhostElement();
//??????????????
var offH = this.elm.offsetHeight;
if (Util.isGecko) {
//??gecko??????
offH -= parseInt(_ghostElement.style.borderTopWidth) * 2;
}
//??????????????
var offW = this.elm.offsetWidth;
//??left?top???
var offLeft = Util.getOffset(this.elm, true);
var offTop = Util.getOffset(this.elm, false);
//????????
Util.hide();
//?????????style????
this.elm.style.width = offW + "px";
//????????????????????????
_ghostElement.style.height = offH + "px";
//???????????????
this.elm.parentNode.insertBefore(_ghostElement, this.elm.nextSibling);
//????????????????????????????????position?absolute?????????css???????
this.elm.style.position = "absolute";
//??zIndex???????????????zIndex=100?????????????zIndex>100?????
this.elm.style.zIndex = 100;
//??position=absolute????left?top????????????????????????????????????????????
this.elm.style.left = offLeft + "px";
this.elm.style.top = offTop + "px";
//?????????????????????
Util.show();
//??????ig_d.G???????????????????????????????????
//??????????????
this.isDragging = false;
return false;
};
//??????????????????move??event????????????clientX, clientY
function when_Drag(clientX, clientY) {
//????????????????????????
if (!this.isDragging) {
this.elm.style.filter = "alpha(opacity=70)";
this.elm.style.opacity = 0.7;
this.isDragging = true;
}
//???????column????????????
var found = null;
//?????????????????bug
var max_distance = 100000000;
//?????????element???????????????????????????
for (var i = 0; i < Util.dragArray.length; i++) {
var ele = Util.dragArray[i];
//??????????????????????
var distance = Math.sqrt(Math.pow(clientX - ele.elm.pagePosLeft, 2) + Math.pow(clientY - ele.elm.pagePosTop, 2));
//????????????????
if (ele == this) {
continue;
}
//??????????
if (isNaN(distance)) {
continue;
}
//??????????????????found
if (distance < max_distance) {
max_distance = distance;
found = ele;
}
}
//???????
var _ghostElement = getGhostElement();
//???????????
if (found != null && _ghostElement.nextSibling != found.elm) {
//???????????????????????????????????????????
found.elm.parentNode.insertBefore(_ghostElement, found.elm);
if (Util.isOpera) {
//Opera?????????/??????????
document.body.style.display = "none";
document.body.style.display = "";
}
}
};
//????
function end_Drag() {
//???????????????after_Drag()?????????????????????????????????
if (this._afterDrag()) {
//remote call to save the change
}
return true;
};
//????????
function after_Drag() {
var returnValue = false;
//????
Util.hide();
//?????position=absolute??????style???
this.elm.style.position = "";
this.elm.style.width = "";
this.elm.style.zIndex = "";
this.elm.style.filter = "";
this.elm.style.opacity = "";
//????
var ele = getGhostElement();
//???????????????
if (ele.nextSibling != this.origNextSibling) {
//????????????????
ele.parentNode.insertBefore(this.elm, ele.nextSibling);
//??????????
returnValue = true;
}
//??????????????????????
ele.parentNode.removeChild(ele);
//???????
Util.show();
if (Util.isOpera) {
//Opera?????????/??????????
document.body.style.display = "none";
document.body.style.display = "";
}
return returnValue;
};
//???Element???????event??????????????????netvibes???????????
//??????dindin???????????http://www.jroller.com/page/dindin/?anchor=pro_javascript_12
var Drag = {
//???element????????????Element
obj:null,
//element???????????elementHeader???????????
init:function (elementHeader, element) {
//?start???onmousedown?????????start
elementHeader.onmousedown = Drag.start;
//?element??header?obj?????header???????
elementHeader.obj = element;
//?????????????position=absolute????????????????onDrag???parse???
if (isNaN(parseInt(element.style.left))) {
element.style.left = "0px";
}
if (isNaN(parseInt(element.style.top))) {
element.style.top = "0px";
}
//???Function???????????Drag.init??????????????????draggable?????
element.onDragStart = new Function();
element.onDragEnd = new Function();
element.onDrag = new Function();
},
//?????????????????event?
start:function (event) {
var element = Drag.obj = this.obj;
//????????event???????
event = Drag.fixE(event);
//?????????
if (event.which != 1) {
//?????????
return true;
}
//???????????????????
element.onDragStart();
//??????
element.lastMouseX = event.clientX;
element.lastMouseY = event.clientY;
//?Global?event???????element???
document.onmouseup = Drag.end;
document.onmousemove = Drag.drag;
return false;
},
//Element????????
drag:function (event) {
//????????event???????
event = Drag.fixE(event);
//?????????
if (event.which == 0) {
//?????????
return Drag.end();
}
//??????Element
var element = Drag.obj;
//????
var _clientX = event.clientY;
var _clientY = event.clientX;
//????????????
if (element.lastMouseX == _clientY && element.lastMouseY == _clientX) {
return false;
}
//??Element???
var _lastX = parseInt(element.style.top);
var _lastY = parseInt(element.style.left);
//????
var newX, newY;
//????????????+???????
newX = _lastY + _clientY - element.lastMouseX;
newY = _lastX + _clientX - element.lastMouseY;
//??element?????
element.style.left = newX + "px";
element.style.top = newY + "px";
//??element?????????????
element.lastMouseX = _clientY;
element.lastMouseY = _clientX;
//?????????????Drag????
element.onDrag(newX, newY);
return false;
},
//Element?????????????
end:function (event) {
//????????event???????
event = Drag.fixE(event);
//???Global?event???
document.onmousemove = null;
document.onmouseup = null;
//????onDragEnd???????obj
var _onDragEndFuc = Drag.obj.onDragEnd();
//?????obj??
Drag.obj = null;
return _onDragEndFuc;
},
//????????event???????
fixE:function (ig_) {
if (typeof ig_ == "undefined") {
ig_ = window.event;
}
if (typeof ig_.layerX == "undefined") {
ig_.layerX = ig_.offsetX;
}
if (typeof ig_.layerY == "undefined") {
ig_.layerY = ig_.offsetY;
}
if (typeof ig_.which == "undefined") {
ig_.which = ig_.button;
}
return ig_;
}
};
//????????????????????????
var _IG_initDrag = function (el) {
//column??????google??????table???tbody?netvibes??<div>
Util.rootElement = el;
//??tbody??
Util._rows = Util.rootElement.tBodies[0].rows[0];
//??google?3?????????
Util.column = Util._rows.cells;
//??????????
Util.dragArray = new Array();
var counter = 0;
for (var i = 0; i < Util.column.length; i++) {
//?????column
var ele = Util.column[i];
for (var j = 0; j < ele.childNodes.length; j++) {
//????column?????element
var ele1 = ele.childNodes[j];
//???div?????????draggable??
if (ele1.tagName == "DIV") {
Util.dragArray[counter] = new draggable(ele1);
counter++;
}
}
}
};
//google????????????id?"t_1"
//???onload?????????????google???onload?
//??????????????????????????????????????????
//????????????????????????google ig?????????????script???????js?????????
//_table=document.getElementById("t_1");
//window.onload = _IG_initDrag(_table);
//???????????javascript?????????????
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -