JavaScript之實例練習(模態對話框詳解)

一、Class的屬性

1、class的常用操作

  • 獲取對象所有class: elementNode.className
  • 給對象添加class:elementNode.classList.add
  • 給對象去除class:elementNode.classList.remove

2、練習代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Class屬性</title>
</head>
<body>

<div class="div1 div2">空空</div>

<script>
    var ele=document.getElementsByTagName("div")[0];

    console.log(ele.className);  //所有class名
    console.log(ele.classList[0]);  //第一個class名
    console.log(ele.classList[1]);  //第二個class名
    
    ele.classList.add("NewName");  //再添加一個class名
    console.log(ele.className);

</script>

</body>
</html>

3、測試結果
1
以上四條結果分別對應代碼塊中的四個console.log指令

二、模態對話框

1、效果分析
可能有些人不知道模態對話框是什麼,這裏用抽屜首頁舉個圖例
2
可以看到,網頁總共總共分爲三層,背景層、遮罩層和模態對話框,當點擊登錄就會彈出這個界面,點擊×叉叉就會退出界面,這就是一個模態對話框的工作效果

2、原理分析
其實這個不難實現,剛開始訪問時,我們默認給它們添加一個hide的class名字,這樣就會將擁有這個hide名字的遮罩標籤和對話框標籤隱藏起來,:

.hide{
            display:none;
        }

然後添加一個“登錄”按鈕,綁定事件onclick和執行函數show(),在這個show裏面,我們將遮罩標籤和對話框標籤那個hide的class名去掉,就沒有隱藏效果了,就顯示出來了:

function show(){
        var ele_shade=document.getElementsByClassName("shade")[0];
        var ele_model=document.getElementsByClassName("model")[0];

        //去除標籤的一個class名,即隱藏效果的class被去除了就不隱藏了,被顯示在頁面上
        ele_shade.classList.remove("hide");
        ele_model.classList.remove("hide");
    }

同理,添加一個“取消”按鈕,綁定事件和cancel()函數,在cancel中,又給遮罩標籤和對話框標籤添加上那個hide的class名:

function cancel(){
        var ele_shade=document.getElementsByClassName("shade")[0];
        var ele_model=document.getElementsByClassName("model")[0];

        //添加隱藏效果的class名,則被隱藏起來
        ele_shade.classList.add("hide");
        ele_model.classList.add("hide");

        console.log(ele_shade.classList)
        console.log(ele_model.classList)
    }

3、練習代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模態對話框</title>
    <style>
        .content{
            height: 1500px;
            background-color: white;
        }

        .shade{
            position: fixed;
            top:8px;
            left: 8px;
            right: 8px;
            bottom: 8px;
            background-color: grey;
            opacity: 0.5;  /*透明度*/
        }

        .model{
            width:200px;
            height: 200px;
            background-color: yellowgreen;
            position:fixed;
            top:50%;
            left:50%;
            margin-top: -100px;
            margin-left: -100px;
        }

        /*剛訪問時讓組件隱藏起來*/
        .hide{
            display:none;
        }
    </style>
</head>
<body>

<div class="content">
    <button onclick="show()">登陸</button>
    我是背景層!
</div>

<div class="shade hide"></div>
<!--遮罩層:加在content表面的一層,讓原來的頁面顏色變淡-->

<div class="model hide">
    <button onclick="cancel()">取消</button>
    model部分
</div>


<script>
    function show(){
        var ele_shade=document.getElementsByClassName("shade")[0];
        var ele_model=document.getElementsByClassName("model")[0];

        //去除標籤的一個class名,即隱藏效果的class被去除了就不隱藏了,被顯示在頁面上
        ele_shade.classList.remove("hide");
        ele_model.classList.remove("hide");
    }

    function cancel(){
        var ele_shade=document.getElementsByClassName("shade")[0];
        var ele_model=document.getElementsByClassName("model")[0];

        //添加隱藏效果的class名,則被隱藏起來
        ele_shade.classList.add("hide");
        ele_model.classList.add("hide");

        console.log(ele_shade.classList)
        console.log(ele_model.classList)
    }
</script>
</body>
</html>

4、測試結果:
3
這樣,效果就能實現了,點擊登陸就出現模態對話框,點擊取消就將遮罩層和對話框隱藏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章