JavaScript---Dom樹詳解,節點查找方式(直接(id,class,tag),間接(父子,兄弟)),節點操作(增刪改查,賦值節點,替換節點,),節點屬性操作(增刪改查),節點文本的操作(增刪改查),事件


JavaScript---Dom樹詳解,節點查找方式(直接(id,class,tag),間接(父子,兄弟)),節點操作(增刪改查,賦值節點,替換節點,),節點屬性操作(增刪改查),節點文本的操作(增刪改查),事件

一丶DOM樹

      DOM:文檔對象模型。DOM 為文檔提供了結構化表示,並定義了如何通過腳本來訪問文檔結構。目的其實就是為了能讓js操作html元素而制定的一個規范。

      DOM就是由節點組成的:HTML加載完畢,渲染引擎會在內存中把HTML文檔,生成一個DOM樹.如下圖

img

# 在HTML中,一切皆節點. 一切皆節點對象
# 結構:
	# 元素節點: HTML標簽
	# 文本節點: 標簽中的文字
	# 屬性節點: 標簽的屬性

# 利用dom可以操作以下:
	找對象(元素節點)
	設置元素的屬性值
	設置元素的樣式
	動態創建和刪除元素
	事件的觸發:事件源,事件,事件的驅動程序

二丶節點查找(直接查找和間接查找)

直接查找:

      DOM節點的獲取方式其實就是獲取事件源的方式

​      操作元素節點,必須首先找到該節點。有三種方式可以獲取DOM節點:

//方式一:通過id獲取單個標簽 
	var div1 = document.getElementById("box1");  
    
//方式二:通過 標簽名 獲得 標簽數組,所以有div
	var arr1 = document.getElementsByTagName("div");   
    
//方式三:通過 類名 獲得 標簽數組,所以有p1類
	var arr2 = document.getElementsByClassName("p1");  
//----- div1 ,arr1,arr2 都是對象

//其中方式二、方式三獲取的是標簽數組,那么習慣性是先遍歷之后再使用。
//即便如此,這一個值也是包在數組里的。這個值的獲取方式如下:
    document.getElementsByTagName("div1")[0];    //取數組中的第一個元素
    document.getElementsByClassName("hehe")[0];  //取數組中的第一個元素

間接查找:

​      可以查找當前節點的 子父節點 ,兄弟節點 . 如下圖👇:

img

​      獲得父兄節點代碼:

// 獲取父節點, 語法: 節點.parentNode
	var d1 = document.getElementById('div1');
	var parNode = d1.parentNode();

// 獲取兄弟節點 
	
	/* 獲取下一個 節點 ,語法: 節點. nextSibling */
        nextSibling:指的是下一個節點(包括標簽、空文檔和換行節點)
        火狐、谷歌、IE9+版本:都指的是下一個節點(包括標簽、空文檔和換行節點)。

			var d1 = document.getElementById('div1');
			var nextTag = d1.nextSibling();        




    /* 獲取上一個 節點  ,語法: 節點. previousSibling  */
        previousSibling:
        火狐、谷歌、IE9+版本:都指的是前一個節點(包括標簽、空文檔和換行節點)。
        IE678版本:指前一個元素節點(標簽)。
 			
			var d1 = document.getElementById('div1');
			var preTag = d1.previousSibling();         
    



    /* 獲得下一個 元素 節點   ,語法: 節點. nextElementSibling */
        IE678版本:指下一個元素節點(標簽)。
        nextElementSibling:火狐、谷歌、IE9+版本:指的是下一個元素節點(標簽)。

 			var d1 = document.getElementById('div1');
			var nextElement = d1.nextElementSibling();     




     /* 獲得上一個 元素 節點   ,語法: 節點. previousElementSibling */   
     	previousElementSibling:
		火狐、谷歌、IE9+版本:都指的是前一個元素節點(標簽)。

			var d1 = document.getElementById('div1');
			var preElement = d1.previousElementSibling();  

// 獲得任意一個兄弟節點
	var d1 = document.getElementById('div1');
	var parChild = d1.parentNode.children[index];  	//隨意得到兄弟節點

​      獲得子節點代碼:

/* 獲取第一個子節點 | 子元素 */ 
	firstChild:
    火狐、谷歌、IE9+版本:都指的是第一個子節點(包括標簽、空文檔和換行節點)。
    IE678版本:指第一個子元素節點(標簽)。

    firstElementChild:
    火狐、谷歌、IE9+版本:都指的是第一個子元素節點(標簽)

 	//語法: 第一個子元素節點 = 節點.firstElementChild || 節點.firstChild
	var d1 = document.getElementById('div1');
	var firstEle = d1.firstElementChild();   //得到第一個元素	
	var firstNode = d1.firstChild();  	    //得到第一個節點	



/* 獲取最后一個子節點 | 最后一個子元素節點 */:
	lastChild:
    火狐、谷歌、IE9+版本:都指的是最后一個子節點(包括標簽、空文檔和換行節點)。
    IE678版本:指最后一個子元素節點(標簽)。

    lastElementChild:
    火狐、谷歌、IE9+版本:都指的是最后一個子元素節點(標簽)。
	
	//語法: 最后一個子元素節點 = 節點.lastElementChild || 節點.lastChild
	var d1 = document.getElementById('div1');
	var lasEle = d1.lastElementChild();  //得到最后一個元素	
	var lastNode = d1.lastChild(); 	    //得到最后一個節點	



/* 獲得所有子節點,返回一個數組 */
	//1.返回的是指定元素的子節點的集合
	//語法:子節點數組 = 父節點.childNodes;  //獲取所有節點。
	var d1 = document.getElementById('div1');
	var allNode = d1.childNodes();  		//div節點的獲取所有節點。

	//2.返回的是指定元素的子元素節點的集合,它只返回HTML節點,甚至不返回文本節點.所有瀏覽器都支持
	//語法:子節點數組 = 父節點.children;   //獲取所有節點。用的最多。
	var d1 = document.getElementById('div1');
	var allNodeChild = d1.children(); 	    //獲得div節點的所有子節點


/* 額外 */
nodeType == 1 //表示的是元素節點(標簽) 。記住:元素就是標簽。

nodeType == 2 //表示是屬性節點 了解

nodeType == 3 //是文本節點 了解

三丶節點操作

​      節點的訪問關系都是屬性。而節點的操作都是函數(方法)。

節點自身操作:

​      創建節點

/* 創建節點 */
	// 語法: 新的標簽(元素節點) = document.createElement("標簽名");
	var p=document.createElement('p');

      插入節點

/* 插入節點 */
	//方式1:父節點的最后插入一個新的子節點。 
		父節點.appendChild(新的子節點);

		//創建一個節點,插入到div1標簽末尾
		var p=document.createElement('p');
		var div=document.getElementById('div1');
		div.appendChild(p);



	//方式2:在參考節點前插入一個新的節點。如果參考節點為null,那么他將在父節點最后插入一個子節點。
		父節點.insertBefore(新的子節點,作為參考的子節點);

		//創建一個節點,插入到div1標簽第一個位置
		var p=document.createElement('p');
		var div=document.getElementById('div1');
		div.insertBefore(p,參考節點);

​      刪除節點

/* 刪除節點 */
	//用父節點刪除子節點。必須要指定是刪除哪個子節點。
		父節點.removeChild(子節點);

		var div1=document.getElementById('div1');
		div.removeChild('p'); //刪除p標簽
		var p1=document.getElementById('p1');
		div.removeChild(p1); //刪除id為 p1 的標簽




	//刪除自己這個節點
		node1.parentNode.removeChild(node1);
	
		var div1=document.getElementById('div1');
		div1.parentNode.removeChild(div1); // 刪除自身節點

​      復制節點

/* 復制節點 */
	//括號里不帶參數和帶參數false,效果是一樣的。不帶參數/帶參數false:只復制節點本身,不復制子節點。
		要復制的節點.cloneNode();   

		var p1=document.getElementById('p1');
		var p2=p1.cloneNode();  //只克隆一個p節點
 



	//帶參數true:既復制節點本身,也復制其所有的子節點。
		要復制的節點.cloneNode(true);   

		var p1=document.getElementById('p1');
		var p2=p1.cloneNode();  //克隆一個p節點,包括p節點下的所有節點信息包括文本內容

​      替換節點

/* 替換節點 */
	//找到這個父標簽里面的要被替換的子標簽,然后用新的標簽將該子標簽替換掉
		父節點.replaceChild(newnode, 某個節點);
	// 案例
    <div id="box">
        <p id="p1">這是一個段落</p>
        <p id="p2">第二個段落</p>
        <div id="div1">這是div</div>
    </div>
    <script>
        var box=document.getElementById("box");  //找到父元素
        var p1=document.getElementById("p1");    //找到要替換的元素

        var p3=document.createElement('p');//創建要替換的元素
        p3.innerHTML="這是第三個段落";  //為創建的元素賦值
        box.replaceChild(p3,p1);  //替換節點
        p1.parentNode.replaceChild(p3,p1); //通過parentNode節點替換
    </script>

節點屬性操作:

​      獲取節點的屬性值、設置節點的屬性值、刪除節點的屬性。

/* 獲取節點的屬性值 方式一 : 直接操作標簽 */

   // <input type="text" id='d1' name="" value="" >
   var d1=getElementById('d1'); //獲取id為d1的標簽對象

   // 元素節點.屬性;
	 d1.name 

   // 元素節點[屬性];
	 d1.['name']


/* 獲取節點的屬性值 方式二 : 標簽作為DOM節點 */

	//元素節點.getAttribute("屬性名稱");
	// <input type="text" id='d1' name="" value="" >

  	 var d1=getElementById('d1'); //獲取id為d1的標簽對象
	 var name=d1.getAttribute('name'); //獲得d1標簽的name屬性

​      設置節點的屬性值

/* 方式1: 語法: 節點對象.屬性  */
  	 var d1=getElementById('d1'); //獲取id為d1的標簽對象
	 d1.name='div1';  // d1是標簽對象,name是其屬性.以.的形式去獲取,並賦值




/* 方式2: 語法: 元素節點.setAttribute(屬性名,屬性值) */
  	 var d1=getElementById('d1'); //獲取id為d1的標簽對象
	 d1.setAttribute('name','div2');  // 給name屬性設置名字為div2


      刪除節點的屬性

/* 刪除節點的屬性 語法: 元素節點.removeAttribute(屬性名)*/
	var d1=getElementById('d1'); //獲取id為d1的標簽對象
	d1.removerAttribute('name'); //移除name屬性

節點文本操作

​      獲取文本的節點值

/* 獲取文本節點的值 */
    var divEle = document.getElementById("d1");
    divEle.innerText  // 獲取該標簽和內部所有標簽的文本內容. 只能是文本內容
    divEle.innerHTML  // 獲取的是該標簽內所有內容包括: 文本 和 HTML標簽.

​      設置文本節點的值

/* 設置文本節點的值 */
    var divEle = document.getElementById("d1");
    divEle.innerText='設置標簽包裹的值'
    

      獲取值操作 (節點.value)

/* 適用於以下標簽,用戶輸入或者選擇類型的標簽:input 、select 、textarea   */

    var inp=document.getElementById('inp')
    console.log(inp.value)
    
    var sel=document.getElementById('sel')
    console.log(sel.value)

    var txt=document.getElementById('txt')
    console.log(txt.value)

      class操作

/* 獲得類的值 */
	標簽對象.classList  //獲取所有樣式類名(字符串) ,首先獲取標簽對象


/* 刪除類的值 */
	標簽對象.classList.remove(cls)  //刪除指定類


/* 添加類的值 */
	標簽對象.classList.add(cls)  //添加類


/* 判斷類是否包含cls值 */
	標簽對象.classList.contains(cls)  //存在返回true,否則返回false
	

/* 類的值存在就刪除 */
	標簽對象.classList.toggle(cls)  //存在就刪除,否則添加,toggle的意思是切換,有了就給你刪除,如果沒有就給你加一個

​      css屬性操作

/* 給標簽對象添加屬性 */
obj.style.backgroundColor="red"

四丶事件

核心

​      事件源,事件,事件驅動程序

(1)獲取事件源:document.getElementById(“box”); //類似與ios語言的 UIButton *adBtn = [UIButton buttonWithType:UIButtonTypeCustom];
(2)綁定事件: 事件源box.事件onclick = function(){ 事件驅動程序 };
(3)書寫事件驅動程序:關於DOM的操作

​      示例代碼

<body>
	<div id='d1'></div>	
</body>
<script>
    // 1.獲取事件源
	var d1=document.getElementById('d1');
    
    // 2.綁定事件
    d1.onclick=function(){
        // 3.事件的執行
        alert('彈框');
    }
</script>

常見的事件類型:

img

獲得事件源的方式:

// 根據 Id 獲取,事件源對象
	var d1=document.getElementById('d1');

// 根據 class類 獲取,事件源對象
	var d2=document.getElementsByClassName('div1');

// 根據 標簽 獲取,事件源對象
	var d3=document.getElementsByTagName('d1');

綁定事件的方式:

/* 方式一: 直接綁定 匿名函數 */
	<div id='d1'></div>	
	<script>
        var d1=document.getElementById('d1');
		// 綁定匿名函數
		d1.onclick=function(){
            alert('彈窗');
        }
     </script>



/* 方式二: 單獨定義一個函數, 在綁定事件 */
	<div id='d1'></div>	
	<script>
        var d1=document.getElementById('d1');

		// 綁定click_event函數
		d1.onclick=click_event;
		
		// click_event函數單獨寫
		function click_event(){
            alert('彈框');
        }
     </script>





/* 方式三: 行內定義函數 */
	// 定義行內事件
	<div id='d1' onclick='click_event()'></div>

	<script>
		// click_event函數單獨寫
		function click_event(){
            alert('彈框');
        }
     </script>

五丶事件案例

紅綠燈

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>紅綠燈</title>
    <style>
        div {
            display: inline-block;
            width: 100px;
            height: 100px;
            background-color: lightgray;
            border-radius: 50px;
        }

        .red {
            background-color: red;
        }

        .green {
            background-color: green;
        }

        .yellow {
            background-color: yellow;
        }
    </style>
</head>
<body>
<div id="red"></div>
<div id="yellow"></div>
<div id="green"></div>

</body>
<script>
    var r = document.getElementById('red');
    var g = document.getElementById('green');
    var y = document.getElementById('yellow');

    setInterval(fn,2000)

    function fn() {
        if (r.classList.contains('red')) {
            r.classList.remove('red');
            y.classList.add('yellow');
        } else if (y.classList.contains('yellow')) {
            y.classList.remove('yellow');
            g.classList.add('green')
        } else {
            g.classList.remove('green');
            r.classList.add('red');
        }
    }


</script>
</html>

字體隨機變色

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="contant">不想變色</div>
</body>
<script>
    var con=document.getElementById('contant');

    setInterval(fn,200);
    function fn() {
        //#000000 - # ffffff
        // 1.得到16進制顏色數字: 0-16 :
        // 隨機生成公式: min+(max-min)*Math.random()===>0+((16-0)**6-1)*Math.random()
        // 2. 向上取整 ceil()函數
        // 3.將10進制的顏色轉換為16進制
        color=Math.ceil((16**6-1)*Math.random(),16)
        // console.log(color);
        con.style.color='#'+color;
    }
</script>
</html>

廣告業關閉

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
        }
        div{
            width: 100%;
            height: 30px;
            background-color: firebrick;
            line-height: 30px;
            color: white;
            text-align: center;
        }
        button{
            float: right;
        }
    </style>
</head>
<body>
    <div id="adv">這是一句廣告詞<button id="btn">X</button></div>

        <img src="1.jpg" alt="">

</body>
<script>
    var adv=document.getElementById('adv');
    var btn=document.getElementById('btn')

     function closeAdv(){
            adv.style.display='none';
        }

    //手動點擊 關閉廣告
    btn.onclick=function () {
        adv.style.display='none';
    };

    // 定時任務, 3秒自動關閉廣告
    if (adv.style.display!='none'){
            setTimeout(closeAdv,3000);
    }

</script>
</html>

select框聯動

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>聯動查詢</title>
    <style>
        select{
            width: 300px;
            background-color: orange;
        }
    </style>
</head>
<body>

<select name="province" id="pro">
    <option value="">請選擇省份:</option>
</select>

<select name="city" id="city">
        <option value="null">請選擇城市:</option>
</select>

</body>
<script>
    data={'河南省':['安陽市','鄭州市','林州市'],'河北省':['邯鄲市','廊坊市','石家庄'],'浙江省':['杭州市','溫州市','呱唧呱唧']}
    var pro=document.getElementById('pro');
    var city=document.getElementById('city');

    for (var el in data){
        // console.log(el);
        var opt_pro=document.createElement('option');
        opt_pro.innerText=el;
        pro.append(opt_pro);
    }

    //  使用 onchange事件, id為pro的表的值更改了.
    pro.onchange=function () {
        // 清空city標簽內的數據
        city.innerText=null;

        // 獲取 用戶選擇的省份的 索引
            /*options是或用戶選擇的當前項,selectedIndex是獲得選擇的索引*/
        var ind=this.options.selectedIndex;

        // 根據索引 獲得文本內容
        var pro_sel=this.children[ind].innerText;

        // 用戶選擇城市走eles代碼塊,沒有選擇走if代碼塊
        if (pro_sel=='請選擇省份:'){
            var opt_cit=document.createElement('option');
            opt_cit.innerText='請選擇城市:';
            city.append(opt_cit);
        }else {
            for (var el2 in data[pro_sel]){
                //循環取值,  創建一個新的option標簽
                var opt_cit=document.createElement('option');
                //賦值
                opt_cit.innerText=data[pro_sel][el2];
                //添加到city標簽內
                city.append(opt_cit);
            }
        }
    }



</script>
</html>

動態顯示時間

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>動態顯示時間</title>
</head>
<body>
<input type="text" id="gt">
<button id="st">顯示時間</button>
<button id="ct">暫停時間</button>
</body>
<script>
    var gt=document.getElementById('gt');
    var st=document.getElementById('st');
    var ct=document.getElementById('ct');

    function fn() {
        var nd=new Date();
        // gt.value 是給input框賦值
        gt.value=nd.toLocaleString();
    }

    //點擊顯示時間
    st.onclick=function () {
        ret=setInterval(fn,1000);
    }

    // 點擊暫停時間
    ct.onclick=function(){
        clearInterval(ret);
    }


    
</script>
</html>

模態框

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模態對話框</title>
    <style>
        .color-body{
            background-color: gray;
        }
        div{
            display:none;
            position: fixed;
            width: 370px;
            height: 300px;
            top: 150px;
            left: 570px;
            background-color: wheat;
        }
        button{
            float: right;
            position: relative;
            top: -20px;
        }
    </style>
</head>
<body id="body">
    <input type="button" id="btn" value="模態框">
    <div id="mtk">
        <input type="text" placeholder="請輸入內容">
        <input type="text" placeholder="請輸入內容">
        <input type="text" placeholder="請輸入內容">
        <input type="text" placeholder="請輸入內容">
        <button id="btn-close">X</button>
    </div>
</body>
<script>
    var btn=document.getElementById('btn');
    var body=document.getElementById('body');
    var mtk=document.getElementById('mtk');
    var btn_close=document.getElementById('btn-close');

    // 點擊彈出對話框
    btn.onclick=function () {
        btn.style.display='none';
        body.classList.add('color-body');
        mtk.style.display='inline-block';
    }

    //點擊X退出對話框
    btn_close.onclick=function () {
        btn.style.display='block';
        body.classList.remove('color-body');
        mtk.style.display='none';
    }
</script>
</html>

留言板

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>

</head>

<body>
<h1>留言板</h1>
<div id="convalue"></div>
<textarea name="content" id="con" cols="30" rows="10"></textarea>
<button id="add">添加</button>
<button id="scon">統計</button>
</body>
<script>
    var add=document.getElementById('add');
    var scon=document.getElementById('scon');

    //統計
    var count=0

    // 添加點擊事件
    add.onclick=function () {

        var txtEle=this.previousElementSibling;
        //利用正則先去除空格
        var res=txtEle.value.replace(/\s+/g, "");
        if (res) {
            // 創建 p標簽對象
            var p = document.createElement('p');
            var btn = document.createElement('button');
            var myDate = new Date()

            //給p標簽填充數據
            p.innerHTML = '留言:[' + txtEle.value + '] 日期:' + myDate.toLocaleDateString()+'<button class="del" >X</button>';

            //獲得 id為convalue節點
            var convalue = this.previousElementSibling.previousElementSibling;
            // 獲得div元素內第一個標簽
            var next=convalue.children[0];
            //添加p標簽
            convalue.insertBefore(p,next);
            //將文本域中的文字清空
            txtEle.value = null;
            count++;
        }else {
            txtEle.value =null;
        }

            var commos=document.getElementsByClassName('del');

            for (var i=0; i<commos.length;i++){
                var btn=commos[i];
                var ffatherNode=btn.parentNode.parentNode
                btn.onclick=function () {
                    ffatherNode.removeChild(this.parentNode);
                    count--;
                }
            }
    };
    
    
scon.onclick=function () {
    alert('一共:'+count+'條留言');
}


</script>
</html>

計時器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div span{
            display: inline-block;
            height: 150px;
            line-height: 150px;
            font-size: 50px;
        }
        .num {
            background-color: lightgray;
            width: 100px;
            text-align: center;
            border-radius: 10px;
    }
        .btn{
            padding: 20px;
            text-align: center;
        }

    </style>
</head>
<body>
<div>
    <div>
        <span class="num" id="hour0">0</span>
        <span class="num" id="hour1">0</span>
        <span>:</span>
        <span class="num" id="minute0">0</span>
        <span class="num" id="minute1">0</span>
        <span>:</span>
        <span class="num" id="second0">0</span>
        <span class="num" id="second1">0</span>
    </div>
    <div class="btn">
        <button id = 'start'>開始計時</button>
        <button id = 'stop'>停止計時</button>
        <button id = 'reset'>重置計時</button>
    </div>

</div>
<script>
    var start = document.getElementById('start')
    var stop = document.getElementById('stop')
    var reset = document.getElementById('reset')
    start.onclick = function () {
        interval = setInterval('change_bar("second",6)',1000)
    }
    function change_bar(idval,maxval) {
        var s1 = document.getElementById(idval+'1');
        var s1_value = parseInt(s1.innerText)
        s1_value++
        if(s1_value===10){
            s1_value = 0;
            var s0 = document.getElementById(idval+'0');
            var s0_value = parseInt(s0.innerText)
            s0_value++
            if(s0_value===maxval){
                s0_value=0
                if(idval === 'second'){
                    change_bar('minute',6)
                }else if(idval === 'minute'){
                    change_bar('hour',10)
                }
            }
            s0.innerText = s0_value
        }
        s1.innerText = s1_value
    }
    stop.onclick = function () {
        clearInterval(interval)
    }
    reset.onclick = function () {
        clearInterval(interval)
        var spans = document.getElementsByClassName('num')
        for(var i=0;i<spans.length;i++){
            spans[i].innerText=0
        }
    }

</script>
</body>
</html>

示例

onscoll事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>	onscoll事件</title>
    <style>
        div{
            height: 2000px;
        }
        a {
            position: fixed;
            right: 30px;
            bottom: 30px;
            display: none;
            background-color:pink;
            color: white;

        }
    </style>
</head>
<body>
<!-- 回到頂部 -->
<div></div>
<a href="#" id="a">回到頂部</a>
</body>
<script>
    //針對獲取瀏覽器的垂直滾動條的位置
    /* 獲得瀏覽器側邊欄滾動條事件 */
    window.onscroll=function () {
        var  a =document.getElementsByTagName('a')[0];
        console.log(a)

        // 滾動條的數值
        // var num1=document.documentElement.scrollHeight;
        var num2=document.documentElement.scrollTop;
        console.log(num2,typeof num2)

        if (document.documentElement.scrollTop>500){
            a.style.display='inline-block';
        }else {
            a.style.display='none';
        }
    }
</script>
</html>

當鼠標懸停在img上時,更換為另外一張圖片;鼠標離開時,還原為本來的圖片。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script>
        //window.onload頁面加載完畢以后再執行此代碼
        window.onload = function () {
            //需求:鼠標放到img上,更換為另一張圖片,也就是修改路徑(src的值)。
            //步驟:
            //1.獲取事件源
            //2.綁定事件
            //3.書寫事件驅動程序

            //1.獲取事件源
            var img = document.getElementById("box");
            //2.綁定事件(懸停事件:鼠標進入到事件源中立即出發事件)
            img.onmouseover = function () {
                //3.書寫事件驅動程序(修改src)
                img.src = "image/jd2.png";
//                this.src = "image/jd2.png";
            }

            //1.獲取事件源
            var img = document.getElementById("box");
            //2.綁定事件(懸停事件:鼠標進入到事件源中立即出發事件)
            img.onmouseout = function () {
                //3.書寫事件驅動程序(修改src)
                img.src = "image/jd1.png";
            }
        }
    </script>
</head>
<body>

    <img id="box" src="image/jd1.png" style="cursor: pointer;border: 1px solid #ccc;"/>

</body>
</html>

tab欄選項卡

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
            }
            ul{
                list-style: none;
            }
            #tab{
                width: 480px;
                margin: 20px auto;
                border: 1px solid red;
            }
            ul{
                width: 100%;
                overflow: hidden;
            }
            ul li{
                float: left;
                width: 160px;
                height: 60px;
                line-height: 60px;
                text-align: center;
                background-color: #cccccc;
            }
            
            ul li a{
                text-decoration: none;
                color:black;
            }
            li.active{
                background-color: red;
            }
            p{
                display: none;
                height: 200px;
                text-align: center;
                line-height: 200px;
                background-color: red;
            }
            p.active{
                display: block;
                
            }
            
        </style>
    </head>
    <body>
        <div id="tab">
            <ul>
                <li class="active">
                    <a href="#">首頁</a>
                </li>
                <li>
                    <a href="#">新聞</a>
                </li>
                <li>
                    <a href="#">圖片</a>
                </li>        
            </ul>
            <p class="active">首頁內容</p>
            <p>新聞內容</p>
            <p>圖片內容</p>
            
            
        </div>
    </body>
    <script type="text/javascript">
        window.onload = function(){
            // //需求:鼠標放到上面的li上,li本身變色(添加類),對應的p也顯示出來(添加類);
                    //思路:1.點亮上面的盒子。   2.利用索引值顯示下面的盒子。

            var tabli = document.getElementsByTagName('li');
            var tabContent = document.getElementsByTagName('p')
        
            for(var i = 0; i < tabli.length; i++){
                // 綁定索引值(新增一個自定義屬性:index屬性)
                tabli[i].index  = i;
                tabli[i].onclick = function(){
                    
                    // 1.點亮上面的盒子。   2.利用索引值顯示下面的盒子。(排他思想)
                    for(var j = 0; j < tabli.length; j++){
                        tabli[j].className = '';
                        tabContent[j].className = '';
                    }    
                    this.className = 'active'
                    
                    tabContent[this.index].className = 'active';//【重要代碼】
                }
        }
        }
        
    </script>
</html>

購物車案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        *{
            padding: 0;
            margin: 0;
        }
        .box{
            width: 500px;
            height: 400px;
            margin: 100px auto;
            background-color: rgba(255,255,255,0.4);
            position: relative;
            
        }
        .car{
            width: 150px;
            height: 30px;
            background-color: #fff;
            padding-left: 30px;
            position: absolute;
            left: 130px;
            top: 3px;
            z-index: 3;
            border: 1px solid green;

        }
        .shop{
            width: 310px;
            height: 70px;
            background-color: #fff;
            position: absolute;
            top:33px;
            left: 0;
            display: none;

        }
        div.c{
            
            border-bottom-width: 0;
            
        }
        div.t{
            border:  1px solid green;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="car" id="myCar">我的購物車</div>
        <div class="shop t" id="shop"></div>
    </div>
    <script type="text/javascript">
        var myCar =  document.getElementById('myCar');
        var shop  = document.getElementById('shop');
        myCar.onmouseover = function(){
            shop.style.display = 'block';
            myCar.className +=' c';
        }
        myCar.onmouseout = function(){
            shop.style.display = 'none';
            myCar.removeAttribute('class');
            myCar.className = 'car';
        }
    </script>
</body>
</html>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM