一、实现方式一
步骤:
1.在input标签里设置button 2.设置鼠标点击事件 3.鼠标点击时出现一个弹框,并且后面的整体背景变了,要先创建好整体背景 再创建弹框内的东西 4.先创建一个块级标签box1作为整体背景,并且设置好box1的高 宽 外边框距离 背景颜色属性(在head标签下建style标签写),此时新建的标签并不在文档中,要把它添加到body标签里面(先找到body标签,然后把box添加进去) 5.再创建一个box2作为弹框背景,把box2添加到box1里,再把box2添加宽高 背景颜色,并把它添加到box1下 6.让box2居中 距离顶部有距离显示(好看点) 7.在box2设置属性 文本 弹出的模态框 在文本框里,并设置文本在框中的显示位置 8.建box3设置属性x在文本框里,就是我们点击看到弹框右上角那个 x 取消 按钮,并设置字体颜色 背景颜色 宽高,并把它添加到box2下 9.还差 点击 X还原到原来页面。把box3添加点击事件。把box1从body里面移除,这样就恢复到原来了
代码演示:
<!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> <style> .box1{ position: absolute; left: 0; right: 0; top: 0; bottom: 0; background-color: #f8d7fa; } .box2{ 500px; height: 500px; background-color: #eeeeee; /*margin: 0 auto;*/ /*margin-top: 100px;*/ position: absolute; top: 100px; left: 50%; margin-left: -250px; text-align: center; line-height: 500px; color: red; } .box3{ position: absolute; right: 0; top: 0; 50px; height: 50px; background-color: red; color: #eeeeee; text-align: center; line-height: 50px; } </style> </head> <body> <input type="button" value="弹出模态框" id="btn"> <script> var btn=document.getElementById("btn") btn.onclick=function () { // alert(111) 测试用 //只是造出来了,但不在文档 var box1=document.createElement("div") var box2=document.createElement("div") var box3=document.createElement("div") box3.innerText="X" box2.innerText="弹出来的啦" //加上类,那么类的属性都有了,这样写解耦合 box1.classList.add("box1") box2.classList.add("box2") box3.classList.add("box3") box1.appendChild(box2) box2.appendChild(box3) //找到一个标签,把它添加到文档里 var body=document.getElementsByTagName("body")[0] // body.appendChild(box1) 这种或者用replaceChild都可以 body.replaceChild(box1,btn) box3.onclick=function () { body.removeChild(box1) } } </script> </body> </html>
二、实现方式二
1.在input标签里设置button 2.在box1里套box2,box2里套box3,box2里有内容 弹出模态框 ,box3里有内容X, 3.其他颜色,宽高背景等属性不变。把box1的属性display : none; 4.把box1的属性display : none; 4.设置input标签鼠标点击事件,在函数内把box1的display=“block”,让其显示 5.设置box1标签鼠标点击事件,在函数内把box1的display=“none”,让其隐藏,这样就又返回到原来状态了
<!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> <style> .box1{ position: absolute; left: 0; right: 0; top: 0; bottom: 0; background-color: #f8d7fa; display: none; } .box2{ 500px; height: 500px; background-color: #eeeeee; /*margin: 0 auto;*/ /*margin-top: 100px;*/ position: absolute; top: 100px; left: 50%; margin-left: -250px; text-align: center; line-height: 500px; color: red; } .box3{ position: absolute; right: 0; top: 0; 50px; height: 50px; background-color: red; color: #eeeeee; text-align: center; line-height: 50px; } </style> </head> <body> <input type="button" value="弹出模态框" id="btn"> <div class="box1"> <div class="box2" >弹出模态框 <div class="box3">X</div> </div> </div> <script> var btn=document.getElementById("btn") btn.onclick=function () { var box1=document.getElementsByClassName("box1")[0] box1.style.display="block" } var box3=document.getElementsByClassName("box3")[0] box3.onclick=function () { var box1=document.getElementsByClassName("box1")[0] box1.style.display="none" } </script> </body> </html>
三、拓展(让模态框内可以让用户输入)
在原来写有 弹出模态框的地方模拟让用户输入用户名密码并有提交按钮
添加步骤:
1.在box2下建form表单,里面包含 让用户输入用户名密码提交的子标签 2.在box3点击时间下设置用户名 密码的value=“”,这样这次输入后下次再打开就不会有记忆了 3.去掉之前设置box2中文字的行高,这样不会溢出,会好看
<form action=""> <p> 用户名:<input type="text" name="username"> </p> <p> 密码:<input type="text" name="password"> </p> <p> <input type="button" value="提交"> </p> </form> --------------------------------------- document.getElementsByName("username")[0].value="" document.getElementsByName("password")[0].value="" ---------------------------------------- line-height: 500px; //删除此行