JavaScript操作DOM对象(四)

className属性

语法:

HTML元素.className=“样式名称”

代码示例:

function over(){
    
    
     document.getElementById("cart").className="cartOver";

     document.getElementById("cartList").className="cartListOver";  }

function out(){
    
    
     document.getElementById("cart").className="cartOut";

     document.getElementById("cartList").className="cartListOut";  }

直接来看一个详细应用的案例:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>我的购物车</title>
    <link rel="stylesheet" href="/css/shopping.css">
    <style>
     /* 样式的优先级:行内>内部>外部
        选择器的优先级:id选择器>类选择器>标签选择器
     */
    </style>
</head>
<body>
<section id="shopping">
    <div id="cart"    onmouseover="over(this)" onmouseout="out(this)">我的购物车<span>1</span></div>
    <div id="cartList">
        <h2>最新加入的商品</h2>
        <ul>
            <li><img src="/images/makeup.jpg"></li>
            <li>倩碧经典三部曲套装(液体皂200ml+明肌2号水200ml+润肤乳125ml)</li>
            <li>¥558.00×1<br/>删除</li>
        </ul>
        <div class="footer">1件商品<span>共计¥558.00</span> <span>去购物车</span></div>
    </div>
</section>
<script>
    //1.确定mouseover和mouseout事件--div#cart
    //鼠标进入对应的事件函数
    function over1(obj){
    
    
       // alert(1);
        //2.将样式与进行绑定
        //1)div#cart背景颜色变为#fff
        obj.style.backgroundColor="#fff";
        //2)div#cart无下边框
        obj.style.borderBottom="none";
        //3)div#cartList由隐藏变为显示 display="none|block|inline|inline-block"
        var cartListObj = document.getElementById("cartList");
        cartListObj.style.display="block";
        //4)将div#cartList层叠与div#cart的部分在最底层
        cartListObj.style.zIndex=-1;
        //5)改变div#cartList的定位以及top位置
        cartListObj.style.position="relative";//相对定位
        cartListObj.style.top="-1px";
    }
    //鼠标移除对应的事件函数
    function out1(obj){
    
    
       // alert(2);
        //2.将样式与进行绑定
        //1)div#cart背景颜色变为#f9f9f9
        obj.style.backgroundColor="#f9f9f9";
        //2)div#cart有下边框
        obj.style.borderBottom="1px #dcdcdc solid";
        //3)div#cartList由显示变为隐藏display="none|block|inline|inline-block"
        var cartListObj = document.getElementById("cartList");
        cartListObj.style.display="none";
    }
</script>
</body>
</html>

这种写法看起来很冗余,所以我们把css代码分割开来

css代码放css中:

/*加上#shooping,选择器就编程id选择器了,优先级就变高了,否则只用类选择器,样式被id选择器覆盖*/
#shopping .cartover{
    
      
    background-color: #fff;
    border-bottom: none ;
}
#shopping .cartListover{
    
    
    display: block ;
    position: relative;
    top:-1px;
    z-index: -1;
}

#shopping .cartout{
    
    
    background-color: #f9f9f9;
    border-bottom: 1px #dcdcdc  solid;
}
#shopping .cartListout{
    
    
    display: none ;
}

然后代码就变得简洁了:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>我的购物车</title>
    <link rel="stylesheet" href="/css/shopping.css">
    <style>
     /* 样式的优先级:行内>内部>外部
        选择器的优先级:id选择器>类选择器>标签选择器
     */
    </style>
</head>
<body>
<section id="shopping">
    <div id="cart"    onmouseover="over(this)" onmouseout="out(this)">我的购物车<span>1</span></div>
    <div id="cartList">
        <h2>最新加入的商品</h2>
        <ul>
            <li><img src="/images/makeup.jpg"></li>
            <li>倩碧经典三部曲套装(液体皂200ml+明肌2号水200ml+润肤乳125ml)</li>
            <li>¥558.00×1<br/>删除</li>
        </ul>
        <div class="footer">1件商品<span>共计¥558.00</span> <span>去购物车</span></div>
    </div>
</section>
<script>
    function over(obj){
    
    
        // 2.将样式与进行绑定
        //1)div#cart的样式的类名
        obj.className="cartover";
        //2)div#cartList的样式的类名
        var cartListObj = document.getElementById("cartList");
         cartListObj.className="cartListover";
         //获取样式的方法二:不兼容IE 只对chrome firefox有效 
         // alert(document.defaultView.getComputedStyle(cartListObj,null).display);
         //获取样式的方法三:适合IE 
         //cartListObj.currentStyle.display="block";
    }
    function out(obj){
    
    
        // 2.将样式与进行绑定
        //1)div#cart的样式的类名
        obj.className="cartout";
        //2)div#cartList的样式的类名
        var cartListObj = document.getElementById("cartList");
        cartListObj.className="cartListout";
    }
    </script>
</body>
</html>

获取元素位置属性的应用:

属性 描述
offsetLeft 返回当前元素左边界到它上级元素的左边界的距离,只读属性
offsetTop 返回当前元素上边界到它上级元素的上边界的距离,只读属性
offsetHeight 返回元素的高度
offsetWidth 返回元素的宽度
offsetParent 返回元素的偏移容器,即对最近的动态定位的包含元素的引用
scrollTop 返回匹配元素的滚动条的垂直位置
scrollLeft 返回匹配元素的滚动条的水平位置
clientWidth 返回元素的可见宽度
clientHeight 返回元素的可见高度
。。。。。 更多请参考官方文档

代码格式:

这是在标准浏览器下的,有时候有兼容性问题

document.body.scrollTop;

document.body.scrollLeft;

document.documentElement.scrollTop;

document.documentElement.scrollLeft;

为了更好的兼容性建议用谷歌浏览器

来看一个代码案例:

<style type="text/css">
#main{
    
    text-align:center; width:1014px; margin: 0 auto;}
#adver{
    
    
	/* position:fixed; 固定布局 */
	position: absolute;
	left:10px;
	top:30px;
	z-index:2;
}
</style>
</head>
<body >
<div id="adver"><img src="images/adv.jpg"/></div>
<div id="main"><img src="images/main1.JPG"/><img src="images/main2.JPG"/><img src="images/main3.JPG"/></div>

<script>
	/*
	总结:
		1.js中所有的计算都要使用parseInt();
		2.样式top left right bottom值单温必须是px
		3.js中变量可以被定义多次,局部变量不能改变全局变量的值!
	*/
	var initTop =0; 
	var initLeft=0;
	//获取广告条距离父元素的上边框的距离
	function init(){
    
    
		
		//alert(1);
		//1.获取广告元素对象
		var advObj = document.getElementById("adver");
		//2.获取广告条距离父元素的距离
		initTop =parseInt(advObj.offsetTop);
		initLeft=parseInt(advObj.offsetLeft);
		console.log(initTop+"--"+initLeft);
	}
	//监听窗口的滚动条的滚动事件
	function move(){
    
    
		//alert(initTop);
		//1.获取滚动条滚动的距离:往上的距离和往左的距离
		var stop = document.documentElement.scrollTop | document.body.scrollTop;
		var sleft = document.documentElement.scrollLeft | document.body.scrollLeft;
		console.log("scrollTop:"+stop+"--scrollleft:"+sleft);
		//2.设置广告条的距离父元素的距离
		//距离父元素上边框的新距离=开始距离+滚动条滚动的距离
		//1)获取广告元素对象
		var advObj = document.getElementById("adver");
		//2)设置距离父元素的距离
		var newTop = initTop + parseInt(stop);
		var newLeft = initLeft + parseInt(sleft);
		console.log("newTop:"+newTop+"--newLeft:"+newLeft);
		//2.设置广告条的距离父元素的距离
		advObj.style.top = newTop+"px";
		advObj.style.left=newLeft+"px";
	}
</script>
</body>

猜你喜欢

转载自blog.csdn.net/weixin_52841956/article/details/112998889