慕课网清风老师的《弹出层效果》这部教程中。http://www.imooc.com/learn/58
当点击登陆按钮时候,生成一个透明度为50%的‘遮罩层’和一个登陆框。这个已经成功实现了,没有问题。
但是,现在我想点击关闭按钮,关闭遮罩层和登陆框。(见77-83行代码)我用removeChild来删除之前生成的节点却不成功,请问是哪里出问题了?
效果如下动态图:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>慕课网-弹出层</title>
<style type="text/css">
*{margin:0; padding:0;}
#close{
background:url(img/close.png) no-repeat;
width:30px;
height:30px;
cursor:pointer;
position:absolute;
right:5px;
top:15px;
text-indent:-999em;
}
#mask{
background-color:#000;
opacity:0.5;
filter: alpha(opacity=50);
position:absolute;
left:0;
top:0;
z-index:1000;
}
#login{
position:fixed;
z-index:2001;
}
.loginCon{
position:relative;
width:670px;
height:380px;
background: url(img/loginBg.png) #2A2C2E center center no-repeat;
}
</style>
<link type="text/css" rel="stylesheet" href="style/main.css" />
<script>
window.onload=function (){
var sheight=document.documentElement.scrollHeight;//获取页面高度
var swidth =document.documentElement.scrollWidth;//获取页面宽度
var wheight=document.documentElement.clientHeight;//获取可视区域的高度
var wwidth=document.documentElement.clientWidth;//获取可视区域的宽度
var obtn=document.getElementById('btnLogin');//抓取id为btnLogin的登陆按钮
obtn.onclick=function (){//点击登陆按钮时创建 1.遮罩层; 2.创建登陆框
var omask=document.createElement('p');//创建一个'遮罩层'p
omask.id='mask';//设定p的id为mask
omask.style.height=sheight+'px';//给遮罩层设定高度为页面高度
omask.style.width=swidth+'px';//给遮罩层的宽度设定为页面宽度
document.body.appendChild(omask);//把创建好的omask节点插入到页面中
var ologin=document.createElement('p');//创建一个'登陆框'p
ologin.id='login';//设定该p的id为login
ologin.innerHTML="<p class='loginCon'><p id='close'></p></p>";
document.body.appendChild(ologin);//将ologin节点插入到页面中
/*
下面两行是给ologin做定位,使其永远在页面的中心位置
top为 (可视高度-ologin高度)/2
width为 (可视宽度-ologin宽度)/2
*/
ologin.style.top=(wheight-ologin.offsetHeight)/2+'px';
ologin.style.left=(wwidth-ologin.offsetWidth)/2+'px';
}
var oclose=document.getElementById('close');//获取id为close的关闭按钮。注:该按钮在之前点击登陆按钮建立的登陆框上
oclose.onclick=function (){//当点击关闭按钮时,执行1.删除遮罩层;2.删除登陆框
document.body.removeChild(omask);
document.body.removeChild(ologin);
}
}
</script>
</head>
<body>
<p id="header">
<p class="container" id="nav">
<h1 id="logo"><a href="/">慕课网</a></h1>
<ul class="l" id="nav-item">
<li> <a href="/course/list">课程</a> </li>
</ul>
<p id="login-area">
<button id="btnLogin" hidefocus="true" class="login-btn">登录</button>
</p>
</p>
</p>
<p id="main">
<p class="slider-container">
<p id="slider">
<ul id="sliderUl">
<li id="bg01"></li>
</ul>
<p id="dotBox"><span class=""></span><span class="active"></span><span class=""></span></p>
</p>
<p id="discripcontainer">
<p class="discripbg"></p>
<p class="discrip">
<h3>换一种方式</h3>
<h2>来学习互联网编程</h2>
<h4>超酷的IT技术免费学习平台</h4>
<p class="btnarea"> <a id="enterbtn" href="/course/list">进入</a> <a id="learnmore" href="javascript:;">了解更多</a> </p>
</p>
</p>
</p>
<p id="freshcourse" class="waper">
<h2><span>每一节课都有一种新奇的感觉</span></h2>
<ul id="freshcourseList">
<li><a href="/course/view/id/48"><img width="280" height="170" alt="IT菜鸟逆袭指南(江湖篇)" title="IT菜鸟逆袭指南(江湖篇)" src="http://img.mukewang.com/530c732400013e5106000338-300-170.jpg">
<h5>IT菜鸟逆袭指南(江湖篇)</h5>
<p>屌爆了!码农逆袭有秘诀,看“挨踢(IT)”小菜鸟慕无忌如何成为技术“土豪”。</p>
<p class="tips"><span class="l">16人参加</span> <span class="r">课程时长:1小时</span></p>
</a></li>
<li><a href="/course/view/id/46"><img width="280" height="170" alt="分享:HTML5离线应用实战演练" title="分享:HTML5离线应用实战演练" src="http://img.mukewang.com/5305da0d0001ab9306000338-300-170.jpg">
<h5>分享:HTML5离线应用实战演练...</h5>
<p>FT Web App是少数真正实现了离线阅读体验的移动应用之一,一起来剖析它的技术吧! </p>
<p class="tips"><span class="l">39人参加</span> <span class="r">课程时长:2小时</span></p>
</a></li>
<li class="mr0"><a href="/course/view/id/43"><img width="280" height="170" alt="分享:移动优先的跨终端 Web" title="分享:移动优先的跨终端 Web" src="http://img.mukewang.com/52e618d80001a7e106000338-300-170.jpg">
<h5>分享:移动优先的跨终端 Web</h5>
<p>不可多得的学习宝典,移动互联时代,您必须知道的跨终端技术。</p>
<p class="tips"><span class="l">261人参加</span> <span class="r">课程时长:1小时</span></p>
</a></li>
<li><a href="/course/view/id/41"><img width="280" height="170" alt="分享:响应式布局" title="分享:响应式布局" src="http://img.mukewang.com/52e5ed2300011d2706000338-300-170.jpg">
<h5>分享:响应式布局</h5>
<p>让网站兼容不同终端不再是梦,为解决移动互联网浏览而诞生。</p>
<p class="tips"><span class="l">148人参加</span> <span class="r">课程时长:1小时</span></p>
</a></li>
<li><a href="/course/view/id/42"><img width="280" height="170" alt="案例:表单美化" title="案例:表单美化" src="http://img.mukewang.com/52e5f6ef000114ab06000338-300-170.jpg">
<h5>案例:表单美化</h5>
<p>追求不凡,一次学习四类表单控件的美化,让所有平淡的表单控件瞬间美好起来!</p>
<p class="tips"><span class="l">105人参加</span> <span class="r">课程时长:2小时</span></p>
</a></li>
<li class="mr0"><a href="/course/view/id/44"><img width="280" height="170" alt="案例:表单验证" title="案例:表单验证" src="http://img.mukewang.com/52e62c09000162fd06000338-300-170.jpg">
<h5>案例:表单验证</h5>
<p>技术升级必修内容! 通过对学习输入框的验证,轻松掌握正则表达式的用法!</p>
<p class="tips"><span class="l">81人参加</span> <span class="r">课程时长:1小时</span></p>
</a></li>
</ul>
</p>
<a id="enterbtn-large" href="/course/list">点击进入</a>
<p id="indexVideo">
<button class="btn-close"></button>
<p id="J_Video"></p>
</p>
</p>
<p id="footer">
<p class="waper">
<p class="footer_logo">
</p>
<ul class="footerwaper">
<li class="des"><span style="">我们的使命:</span>传播互联网最前沿技术,帮助更多的人实现梦想!<br><br>
<p>
京ICP备 13046642号-2
</p>
</li>
<li>
<p><a href="http://www.imooc.com/">网站首页</a></p>
<p><a href="/about/us">关于我们</a></p>
<p><a href="/about/job">人才招聘</a></p>
</li>
<li>
<p> <a href="/about/recruit">内容招募</a></p>
<p> <a href="/about/contact">联系我们</a></p>
<p> <a href="/user/feedback">意见反馈</a></p>
</li>
<li class="attention">
在这里关注我们的动向
<br>
<a id="qzone" href="http://user.qzone.qq.com/1059809142/" target="_blank" title="QQ空间">QQ空间</a>
<a id="sinaweibo" href="http://weibo.com/u/3306361973" target="_blank" title="新浪微博">新浪微博</a>
<a id="qqweibo" href="http://t.qq.com/mukewang999" target="_blank" title="腾讯微博">腾讯微博</a>
<!-- <a id="weixin" href="#" title="腾讯微博">腾讯微博</a>
--></li>
</ul>
</p>
</p>
<p id="mask"></p>
<!--<p id="login">
<p class="loginCon">
<p id="close"></p>
</p>
</p>-->
</body>
</html>
天蓬老师2017-04-11 12:37:59
换一种方式思考,半透明的遮罩层、关闭按钮、login模块不用js来添加,在DOM里写好 设置display:none,什么时候要显示js设置为block,也不会妨碍页面加载时获取它们的id
那就这样写:
var sheight=document.documentElement.scrollHeight;//获取页面高度
var swidth =document.documentElement.scrollWidth;//获取页面宽度
var wheight=document.documentElement.clientHeight;//获取可视区域的高度
var wwidth=document.documentElement.clientWidth;//获取可视区域的宽度
var obtn=document.getElementById('btnLogin');//抓取id为btnLogin的登陆按钮
obtn.onclick=function (){//点击登陆按钮时创建 1.遮罩层; 2.创建登陆框
var omask=document.createElement('p');//创建一个'遮罩层'p
omask.id='mask';//设定p的id为mask
omask.style.height=sheight+'px';//给遮罩层设定高度为页面高度
omask.style.width=swidth+'px';//给遮罩层的宽度设定为页面宽度
document.body.appendChild(omask);//把创建好的omask节点插入到页面中
var ologin=document.createElement('p');//创建一个'登陆框'p
ologin.id='login';//设定该p的id为login
ologin.innerHTML="<p class='loginCon'><p id='close'></p></p>";
document.body.appendChild(ologin);//将ologin节点插入到页面中
/*
下面两行是给ologin做定位,使其永远在页面的中心位置
top为 (可视高度-ologin高度)/2
width为 (可视宽度-ologin宽度)/2
*/
ologin.style.top=(wheight-ologin.offsetHeight)/2+'px';
ologin.style.left=(wwidth-ologin.offsetWidth)/2+'px';
closeThis(omask,ologin);
}
function closeThis(node,log){
var oclose=document.getElementById('close');//获取id为close的关闭按钮。注:该按钮在之前点击登陆按钮建立的登陆框上
oclose.onclick=function (){//当点击关闭按钮时,执行1.删除遮罩层;2.删除登陆框
document.body.removeChild(node);
document.body.removeChild(log);
}
}
PHPz2017-04-11 12:37:59
因为压根找不到close这个btn啊。
你得在渲染完这个overlay之后才能找到close这个btn 再执行。因为是跑完代码,你的closebtn还没写进去呢