DOM2 和 DOM3

样式:

访问元素的样式:

var myDiv=document.getElementById('oDiv');
myDiv.style.backgroundColor='red';

当设置多个样式时候:

var myDiv=document.getElementById('oDiv');
myDiv.style.cssText="width: 200px;background-color: red;";

另外还能通过getPropertyValue()和getPropertyCssValue()方法来访问css样式。

var myDiv=document.getElementById('oDiv');
var prop,value,i;
var len=myDiv.style.length;
for(i=0;i<len;i++){
	prop=myDiv.style.item(i);
	value=myDiv.style.getPropertyValue(prop);
	alert(prop+":"+value);
}
var myDiv=document.getElementById('oDiv');
var prop,value,i;
var len=myDiv.style.length;
for(i=0;i<len;i++){
	prop=myDiv.style.item(i);
	value=myDiv.style.getPropertyCSSValue(prop);
	alert(prop+":"+value.cssText+"("+value.cssValueType+")");
}
移除样式:removeProperty()。

元素大小:

偏移量:

offsetHeight:元素在垂直方向上占用的空间大小

offsetWidth:元素在水平方向上占用的空间大小

offsetTop:元素的上外边框至包含元素的上内边框之间的像素距离。

offsetLeft:元素的左外边框至包含元素的左内边框之间的像素距离。

要知道某个元素在页面上的偏移量,将这个元素的offsetLeft 和offsetTop 与其offsetParent的相同属性相加,如此循环直至根元素,就能得到一个基本准确的值。

function getElementLeft(element){
	var actualLeft=element.offsetLeft;
	var current=element.offsetParent;
	while(current!==null){
		actualLeft+=current.offsetLeft;
		current=current.offsetParent;
	}
	return actualLeft;
}
function getElementTop(element){
	var actualTop=element.offsetTop;
	var current=element.offsetParent;
	while(actualTop!==null){
		actualTop+=current.offsetTop;
		current=current.offsetParent;
	}
	return actualTop;
}

客户区大小:元素内容及其内边距所占据的空间大小。

clientWidth 和clientHeight。

function getViewport(){
	if(document.compatMode=="BackCompat"){
		return{
			width:document.body.clientWidth;
			height:document.body.clientHeight;
		};
	}else{
		return{
			width:document.documentElement.clientWidth;
			height:document.documentElement.clientHeight;
		};
	}
}

滚动大小:包含滚动内容的元素的大小。

scrollTop:在被隐藏在内容区域上方的像素数。

scrollLeft:在被隐藏在内容区域左侧的像素数。

scrollWidth:在没有滚动条的情况下,元素内容的总宽度。

srcollHeight:在没有滚动条的情况下,元素内容的总高度。
注意:在确定文档的总高度时(包括基于视口的最小高度时),必须取得scrollWidth/clientWidth和scrollHeight/clientHeight中的最大值,才能保证在跨浏览器的环境下得到精确的结果。

function getViewport(element){
	var docHeight,docWidth;
	if(document.compatMode=="BackCompat"){
		docWidth=Math.max(document.documentElement.scrollWidth,document.documentElement.clientWidth);
		docHeight=Math.max(document.documentElement.scrollHeight,document.documentElement.clientHeight);
	}else{
		docWidth=Math.max(document.body.scrollWidth,document.body.clientWidth);
		docHeight=Math.max(document.body.scrollHeight,document.body.clientHeight);
	}
}

可以通过改变scrollTop和scrollLeft的值来确定元素当前滚动的状态。

scrollTop=0:回到顶部

确定元素大小:getBoundingClientRect()方法。包含四个属性:top,left,right,bottom。

function getBoundingClientRect(element){
	if(typeof arguments.callee.offset!="number"){
		var scrollTop=document.documentElement.scrollTop;
		var temp=document.createElement("div");
		temp.style.cssText="position: absolute;left:0;top:0;";
		document.body.appendChild(temp);
		arguments.callee.offset=-temp.getBoundingClientRect().top-scrollTop;
		document.body.removeChild(temp);
		temp=null;
	}
	var rect=element.getBoundingClientRect();
	var offset=arguments.callee.offset;
	
	return{
		left:rect.left+offset,
		right:rect.right+offset,
		top:rect.top+offset,
		bottom:rect.bottom+offset
	};
}
为了跨浏览器实现:

function getElementLeft(element){
	var actualLeft=element.offsetLeft;
	var current=element.offsetParent;
	while(current!==null){
		actualLeft+=current.offsetLeft;
		current=current.offsetParent;
	}
	return actualLeft;
}
function getElementTop(element){
	var actualTop=element.offsetTop;
	var current=element.offsetParent;
	while(actualTop!==null){
		actualTop+=current.offsetTop;
		current=current.offsetParent;
	}
	return actualTop;
}
function getBoundingClientRect(element) {
	var scrollTop = document.documentElement.scrolltop;
	var scrollLeft = document.documentElement.scrollleft;
	if(element.getBoundingClientRect) {
		if(typeof arguments.callee.offset != "number") {
			var scrollTop = document.documentElement.scrollTop;
			var temp = document.createElement("div");
			temp.style.cssText = "position: absolute;left:0;top:0;";
			document.body.appendChild(temp);
			arguments.callee.offset = -temp.getBoundingClientRect().top - scrollTop;
			document.body.removeChild(temp);
			temp = null;
		}
		var rect = element.getBoundingClientRect();
		var offset = arguments.callee.offset;

		return {
			left: rect.left + offset,
			right: rect.right + offset,
			top: rect.top + offset,
			bottom: rect.bottom + offset
		};
	}else{
		var actualLeft=getElementLeft(element);
		var actualTop=getElementTop(element);
		return{
			left:actualLeft-scrollLeft,
			right:actualLeft+element.offsetWidth-screenLeft,
			top:actualTop-scrollTop,
			bottom:actualTop+element.offsetHeight-screenTop
		};
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值