web第三次作业

打印 上一主题 下一主题

主题 1694|帖子 1694|积分 5082

作业要求

请利用JS实一个网页中登录窗口的显示/隐藏,页面中拖动移动,并且添加了边界判断的网页效果
作业内容

代码内容

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>登录窗口拖动</title>
  7.     <style>
  8.         * {
  9.             margin: 0;
  10.             padding: 0;
  11.             box-sizing: border-box;
  12.         }
  13.         html,
  14.         body {
  15.             width: 100%;
  16.             height: 100%;
  17.         }
  18.         .container {
  19.             width: 100%;
  20.             height: 100%;
  21.             background-color: #f2f1f2;
  22.         }
  23.         header {
  24.             width: 1200px;
  25.             height: 50px;
  26.             background-color: #fff;
  27.             margin: 0 auto;
  28.             display: flex;
  29.             justify-content: space-between;
  30.             align-items: center;
  31.         }
  32.         header div:nth-of-type(2) {
  33.             display: flex;
  34.             gap: 20px;
  35.             cursor: pointer;
  36.         }
  37.         header div:nth-of-type(2)span:hover {
  38.             font-weight: bolder;
  39.             color: red;
  40.         }
  41.         .login-box {
  42.             display: none;
  43.             overflow: hidden;
  44.             width: 300px;
  45.             height: 200px;
  46.             background-color: #fff;
  47.             border: solid 1px orangered;
  48.             border-radius: 8px;
  49.             box-shadow: rgba(255, 0, 0, 0.5) 5px 5px 5px;
  50.             position: absolute;
  51.             left: 1150px;
  52.             top: 50px;
  53.         }
  54.         .login-box .header {
  55.             height: 40px;
  56.             background-color: orangered;
  57.             display: flex;
  58.             justify-content: space-between;
  59.             align-items: center;
  60.             color: white;
  61.             cursor: pointer;
  62.             padding: 0 10px;
  63.         }
  64.     </style>
  65. </head>
  66. <body>
  67.     <div class="container">
  68.         <header>
  69.             <div>
  70.                 <span>欢迎访问OPENLAB EDU</span>
  71.             </div>
  72.             <div>
  73.                 <span id="login">登录</span>
  74.                 <span id="register">注册</span>
  75.             </div>
  76.             <div class="login-box" id="login-box">
  77.                 <div class="header" id="header">
  78.                     <span>会员登录</span>
  79.                     <span id="close">[关闭]</span>
  80.                 </div>
  81.             </div>
  82.         </header>
  83.     </div>
  84.     <script>
  85.         // 获取登录按钮
  86.         let _login = document.getElementById("login");
  87.         let _login_box = document.getElementById("login-box");
  88.         // 登录按钮添加事件
  89.         _login.onclick = function () {
  90.             // 显示弹窗
  91.             _login_box.style.display = "block";
  92.         }
  93.         // 获取关闭按钮
  94.         let _close = document.getElementById("close");
  95.         _close.onclick = function () {
  96.             // 隐藏弹窗
  97.             _login_box.style.display = "none";
  98.         }
  99.         // 获取登录窗口标题
  100.         let _header = document.getElementById("header");
  101.         // 文档中添加鼠标按下事件
  102.         document.onmousedown = function (event) {
  103.             // 获取鼠标指针在标题上的偏移量(事件函数默认参数:事件对象)
  104.             let offsetX = event.offsetX;
  105.             let offsetY = event.offsetY;
  106.             // 给窗口标题,添加鼠标移动的事件
  107.             _header.onmousemove = function (event2) {
  108.                 // 鼠标移动,获取新的坐标
  109.                 let mouseX = event2.clientX;
  110.                 let mouseY = event2.clientY;
  111.                 // 计算登录窗口坐标
  112.                 let loginX = mouseX - offsetX;
  113.                 let loginY = mouseY - offsetY;
  114.                 // ----------------- 边界判断
  115.                 // 左边界
  116.                 if (loginX <= 0) {
  117.                     loginX = 0;
  118.                 }
  119.                 // 上边界
  120.                 if (loginY <= 0) {
  121.                     loginY = 0;
  122.                 }
  123.                 // 右边界
  124.                 let iw = window.innerWidth; // 浏览器窗口宽度
  125.                 let lw = getComputedStyle(_login_box).width; // 登录窗宽度
  126.                 lw = parseInt(lw); // 转换数据类型
  127.                 if (loginX >= (iw - lw)) {
  128.                     loginX = iw - lw;
  129.                 }
  130.                 // 下边界
  131.                 let ih = window.innerHeight;
  132.                 let lh = getComputedStyle(_login_box).height; // 登录窗高度
  133.                 lh = parseInt(lh); // 转换数据类型
  134.                 if (loginY >= (ih - lh)) {
  135.                     loginY = ih - lh;
  136.                 }
  137.                 // 给登录窗口设置样式
  138.                 _login_box.style.left = loginX + "px";
  139.                 _login_box.style.top = loginY + "px";
  140.             }
  141.         }
  142.         // 鼠标按键抬起事件:什么都不做
  143.         document.onmouseup = function () {
  144.             // 清除了标题上的鼠标移动事件 - 什么都不做
  145.             _header.onmousemove = null;
  146.         }
  147.     </script>
  148. </body>
  149. </html>
复制代码
实现效果



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表