📄 position.js
字号:
//建立X2.Position命名空间
X2.Position={
//设定节点的绝对位置
setPosition:function(e,x,y){
Position.absolutize(e);
e.style.left=x+'px';
e.style.top=y+'px';
}
//将元素e放置在re的一侧,adj以[x,y]的形式表示修正值,默认为[0,0]
,setLeft:function(e,re,adj){
var _adj=adj||[0,0];
var dim2=Element.getDimensions(e);
var offdim=Position.cumulativeOffset(re);
this.setPosition(e,offdim[0]-dim2.width-_adj[0],offdim[1]+_adj[1]);
}
,setRight:function(e,re,adj){
var _adj=adj||[0,0];
var dim=Element.getDimensions(re);
var offdim=Position.cumulativeOffset(re);
this.setPosition(e,offdim[0]+dim.width+_adj[0],offdim[1]+_adj[1]);
}
,setTop:function(e,re,adj){
var _adj=adj||[0,0];
var dim2=Element.getDimensions(e);
var offdim=Position.cumulativeOffset(re);
this.setPosition(e,offdim[0]+_adj[0],offdim[1]-dim2.height-_adj[1]);
}
,setBottom:function(e,re,adj){
var _adj=adj||[0,0];
var dim=Element.getDimensions(re);
var offdim=Position.cumulativeOffset(re);
this.setPosition(e,offdim[0]+_adj[0],offdim[1]+dim.height+_adj[1]);
}
//鼠标移出时判断从元素的哪个方向移出
,leftOut:function(event,e){
var x=Event.pointerX(event);
return x<=Position.cumulativeOffset(e)[0]+1;
}
,rightOut:function(event,e){
var x=Event.pointerX(event);
return x>=Position.cumulativeOffset(e)[0]+Element.getDimensions(e).width;
}
,topOut:function(event,e){
var y=Event.pointerY(event);
//alert(y);
//alert(Position.cumulativeOffset(e)[1]);
return y<=Position.cumulativeOffset(e)[1]+1;
}
,bottomOut:function(event,e){
var y=Event.pointerY(event);
return y>=Position.cumulativeOffset(e)[1]+Element.getDimensions(e).height;
}
}
var RicoUtil = {
getElementsComputedStyle: function ( htmlElement, cssProperty, mozillaEquivalentCSS) {
if ( arguments.length == 2 )
mozillaEquivalentCSS = cssProperty;
var el = $(htmlElement);
if ( el.currentStyle )
return el.currentStyle[cssProperty];
else
return document.defaultView.getComputedStyle(el, null).getPropertyValue(mozillaEquivalentCSS);
},
createXmlDocument : function() {
if (document.implementation && document.implementation.createDocument) {
var doc = document.implementation.createDocument("", "", null);
if (doc.readyState == null) {
doc.readyState = 1;
doc.addEventListener("load", function () {
doc.readyState = 4;
if (typeof doc.onreadystatechange == "function")
doc.onreadystatechange();
}, false);
}
return doc;
}
if (window.ActiveXObject)
return Try.these(
function() { return new ActiveXObject('MSXML2.DomDocument') },
function() { return new ActiveXObject('Microsoft.DomDocument')},
function() { return new ActiveXObject('MSXML.DomDocument') },
function() { return new ActiveXObject('MSXML3.DomDocument') }
) || false;
return null;
},
getContentAsString: function( parentNode ) {
return parentNode.xml != undefined ?
this._getContentAsStringIE(parentNode) :
this._getContentAsStringMozilla(parentNode);
},
_getContentAsStringIE: function(parentNode) {
var contentStr = "";
for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
contentStr += parentNode.childNodes[i].xml;
return contentStr;
},
_getContentAsStringMozilla: function(parentNode) {
var xmlSerializer = new XMLSerializer();
var contentStr = "";
for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
contentStr += xmlSerializer.serializeToString(parentNode.childNodes[i]);
return contentStr;
},
toViewportPosition: function(element) {
return this._toAbsolute(element,true);
},
toDocumentPosition: function(element) {
return this._toAbsolute(element,false);
},
/**
* Compute the elements position in terms of the window viewport
* so that it can be compared to the position of the mouse (dnd)
* This is additions of all the offsetTop,offsetLeft values up the
* offsetParent hierarchy, ...taking into account any scrollTop,
* scrollLeft values along the way...
*
* IE has a bug reporting a correct offsetLeft of elements within a
* a relatively positioned parent!!!
**/
_toAbsolute: function(element,accountForDocScroll) {
if ( navigator.userAgent.toLowerCase().indexOf("msie") == -1 )
return this._toAbsoluteMozilla(element,accountForDocScroll);
var x = 0;
var y = 0;
var parent = element;
while ( parent ) {
var borderXOffset = 0;
var borderYOffset = 0;
if ( parent != element ) {
var borderXOffset = parseInt(this.getElementsComputedStyle(parent, "borderLeftWidth" ));
var borderYOffset = parseInt(this.getElementsComputedStyle(parent, "borderTopWidth" ));
borderXOffset = isNaN(borderXOffset) ? 0 : borderXOffset;
borderYOffset = isNaN(borderYOffset) ? 0 : borderYOffset;
}
x += parent.offsetLeft - parent.scrollLeft + borderXOffset;
y += parent.offsetTop - parent.scrollTop + borderYOffset;
parent = parent.offsetParent;
}
if ( accountForDocScroll ) {
x -= this.docScrollLeft();
y -= this.docScrollTop();
}
return { x:x, y:y };
},
/**
* Mozilla did not report all of the parents up the hierarchy via the
* offsetParent property that IE did. So for the calculation of the
* offsets we use the offsetParent property, but for the calculation of
* the scrollTop/scrollLeft adjustments we navigate up via the parentNode
* property instead so as to get the scroll offsets...
*
**/
_toAbsoluteMozilla: function(element,accountForDocScroll) {
var x = 0;
var y = 0;
var parent = element;
while ( parent ) {
x += parent.offsetLeft;
y += parent.offsetTop;
parent = parent.offsetParent;
}
parent = element;
while ( parent &&
parent != document.body &&
parent != document.documentElement ) {
if ( parent.scrollLeft )
x -= parent.scrollLeft;
if ( parent.scrollTop )
y -= parent.scrollTop;
parent = parent.parentNode;
}
if ( accountForDocScroll ) {
x -= this.docScrollLeft();
y -= this.docScrollTop();
}
return { x:x, y:y };
},
docScrollLeft: function() {
if ( window.pageXOffset )
return window.pageXOffset;
else if ( document.documentElement && document.documentElement.scrollLeft )
return document.documentElement.scrollLeft;
else if ( document.body )
return document.body.scrollLeft;
else
return 0;
},
docScrollTop: function() {
if ( window.pageYOffset )
return window.pageYOffset;
else if ( document.documentElement && document.documentElement.scrollTop )
return document.documentElement.scrollTop;
else if ( document.body )
return document.body.scrollTop;
else
return 0;
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -