7-3 实战题
本节编程练习不计算学习进度,请电脑登录imooc.com操作

实战题

学习完《触发打开及关闭登录浮层》内容后,来检验一下吧!在右侧的编辑器中补全相应的代码!有两个任务需要你去完成哦!

任务

任务1:请在右侧编辑器的第202行补充完整脚本中的showDialog函数的展现登陆浮层 #dialog 的操作代码

任务2:请在右侧编辑器的第214行补充完整,实现在窗口变更大小时,自动剧中和全屏遮罩的操作代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.  
  6. <title>慕课网-拖拽效果</title>
  7.  
  8. <style type="text/css">
  9.  
  10. body{
  11. background: url(images/baidu_demo.png) no-repeat top center #fff;
  12. padding: 0px;margin: 0px;font-size: 12px;font-family: "微软雅黑";
  13. }
  14.  
  15. .ui-dialog{
  16. width: 380px;height: auto;display: none;
  17. position: absolute;z-index: 9000;
  18. top: 100px;left: 100px;
  19. border: 1px solid #d5d5d5;background: #fff;
  20. }
  21. .ui-dialog a{ text-decoration: none;}
  22. .ui-dialog-title{
  23. height: 48px;line-height: 48px;padding-left: 20px;color: #535353;font-size: 16px;
  24. background: #f5f5f5;
  25. border-bottom: 1px solid #efefef;
  26. cursor: move;
  27. }
  28. .ui-dialog-title-closebutton{
  29. width: 16px;height: 16px;display: block;
  30. position: absolute;top: 12px;right: 20px;
  31. background: url(images/close_def.png);
  32. }
  33. .ui-dialog-title-closebutton:hover{
  34. background: url(images/close_hov.png);
  35. }
  36. .ui-dialog-content{
  37. padding: 15px 20px;
  38. }
  39.  
  40.  
  41. .ui-dialog-pt15{
  42. padding-top: 15px;
  43. }
  44. .ui-dialog-l40{
  45. height: 40px;line-height: 40px;
  46. text-align: right;;
  47. }
  48.  
  49. .ui-dialog-input{
  50. width: 100%;height: 40px;
  51. margin: 0px;padding: 0px;
  52. border: 1px solid #d5d5d5;
  53. font-size: 16px;color: #c1c1c1;
  54. text-indent: 25px;
  55. outline: none;
  56. }
  57. .ui-dialog-input-username{
  58. background: url(images/input_username.png) no-repeat;
  59. }
  60. .ui-dialog-input-password{
  61. background: url(images/input_password.png) no-repeat;
  62. }
  63.  
  64. .ui-dialog-submit{
  65. width: 100%;height: 50px;display: block;
  66. font-size: 16px;color: #fff;
  67. background: #3b7ae3;
  68. text-align: center;line-height: 50px;
  69. }
  70. .ui-dialog-submit:hover{
  71. background: #3f81b0;
  72. }
  73.  
  74. .ui-mask{
  75. width: 100%;height: 100%;background: #000;opacity: 0.4;filter: Alpha(opacity=40);
  76. position: absolute;top: 0px;left: 0px;z-index: 8000;display: none;
  77. }
  78.  
  79. .link{
  80. text-align: right;line-height: 20px;padding-right: 40px;
  81. }
  82.  
  83. </style>
  84.  
  85. </head>
  86. <body >
  87.  
  88. <div class="ui-dialog" id="dialog">
  89.  
  90. <div class="ui-dialog-title" id="dialogTitle">
  91. 登录通行证
  92. <a href="javascript:hideDialog();" class="ui-dialog-title-closebutton"></a>
  93. </div>
  94. <div class="ui-dialog-content">
  95.  
  96.  
  97. <div class="ui-dialog-pt15 ui-dialog-l40">
  98. <input type="text" value="手机/邮箱/用户名" class="ui-dialog-input ui-dialog-input-username">
  99. </div>
  100. <div class="ui-dialog-pt15 ui-dialog-l40">
  101. <input type="text" value="密码" class="ui-dialog-input ui-dialog-input-password">
  102. </div>
  103. <div class=" ui-dialog-l40 ">
  104. <a href="#">忘记密码</a>
  105. </div>
  106. <div>
  107.  
  108. <a href="#" class="ui-dialog-submit">登录</a>
  109.  
  110. </div>
  111. <div class="ui-dialog-l40">
  112. <a href="#">立即注册</a>
  113. </div>
  114. </div>
  115. </div>
  116.  
  117. <div class="ui-mask" id="mask" onslectstart="return false"></div>
  118. <div class="link">
  119. <a href="javascript:showDialog();">登录</a>
  120. </div>
  121.  
  122.  
  123. <script type="text/javascript">
  124.  
  125. // 获取元素对象
  126. function g(id){ return document.getElementById(id); }
  127.  
  128. // 自动居中 - 登录浮层 ( el = Elemenet)
  129. function autoCenter( el ){
  130. var bodyW = document.documentElement.clientWidth;
  131. var bodyH = document.documentElement.clientHeight;
  132.  
  133. var elW = el.offsetWidth;
  134. var elH = el.offsetHeight;
  135.  
  136. el.style.left = ( bodyW - elW ) / 2 + 'px';
  137. el.style.top = ( bodyH - elH ) / 2 + 'px';
  138. }
  139.  
  140. // 自动全屏 - 遮罩
  141. function fillToBody( el ){
  142. el.style.width = document.documentElement.clientWidth +'px';
  143. el.style.height = document.documentElement.clientHeight +'px';
  144. }
  145.  
  146. var mouseOffsetX = 0; // 偏移
  147. var mouseOffsetY = 0;
  148.  
  149. var isDraging = false; // 是否可拖拽的标记
  150.  
  151. // 鼠标事件1 - 在标题栏上按下(要计算鼠标相对拖拽元素的左上角的坐标,并且标记元素为可拖动)
  152. g('dialogTitle').addEventListener('mousedown',function(e){
  153. var e = e || window.event;
  154. mouseOffsetX = e.pageX - g('dialog').offsetLeft;
  155. mouseOffsetY = e.pageY - g('dialog').offsetTop;
  156. isDraging = true;
  157. })
  158. // 鼠标事件2 - 鼠标移动时(要检测,元素是否可标记为移动,如果是,则更新元素的位置,到当前鼠标的位置[ps:要减去第一步中获得的偏移])
  159. document.onmousemove = function( e ){
  160. var e = e || window.event;
  161.  
  162. var mouseX = e.pageX; // 鼠标当前的位置
  163. var mouseY = e.pageY;
  164.  
  165. var moveX = 0; // 浮层元素的新位置
  166. var moveY = 0;
  167.  
  168. if( isDraging === true ){
  169.  
  170. moveX = mouseX - mouseOffsetX;
  171. moveY = mouseY - mouseOffsetY;
  172.  
  173. // 范围限定 moveX > 0 并且 moveX < (页面最大宽度 - 浮层的宽度)
  174. // moveY > 0 并且 movey < (页面最大高度 - 浮层的高度)
  175.  
  176. var pageWidth = document.documentElement.clientWidth ;
  177. var pageHeight = document.documentElement.clientHeight ;
  178.  
  179. var dialogWidth = g('dialog').offsetWidth;
  180. var dialogHeight = g('dialog').offsetHeight;
  181.  
  182. var maxX = pageWidth - dialogWidth;
  183. var maxY = pageHeight- dialogHeight;
  184.  
  185. moveX = Math.min( maxX , Math.max(0,moveX) );
  186. moveY = Math.min( maxY , Math.max(0,moveY) );
  187.  
  188. g('dialog').style.left = moveX + 'px';
  189. g('dialog').style.top = moveY + 'px';
  190. }
  191.  
  192. }
  193.  
  194.  
  195. // 鼠标事件3 - 鼠标松开的时候(标记元素为不可拖动即可)
  196. document.onmouseup = function(){
  197. isDraging = false;
  198. }
  199.  
  200. // 展现登录浮层
  201. function showDialog(){
  202. 【任务1
  203. g('mask').style.display = 'block';
  204. autoCenter(g('dialog'));
  205. fillToBody( g('mask') );
  206. }
  207.  
  208. // 隐藏登录浮层
  209. function hideDialog(){
  210. g('dialog').style.display = 'none';
  211. g('mask').style.display = 'none';
  212. }
  213.  
  214. 【任务2=function(){
  215. autoCenter(g('dialog'));
  216. fillToBody( g('mask') );
  217. }
  218. </script>
  219.  
  220. </body>
  221. </html>
下一节