web第三次作业

[复制链接]
发表于 2025-11-2 12:12:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

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

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表