Web第三次作业

要求:

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

HTML完整代码

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>BOMDOM综合案例</title>

<style>

* {

margin: 0;

padding: 0;

box-sizing: border-box;

}

html,

body {

width: 100%;

height: 100%;

}

.container {

width: 100%;

height: 100%;

background-color: #f2f1f2;

}

header {

width: 1200px;

height: 50px;

background-color: #fff;

margin: 0 auto;

display: flex;

justify-content: space-between;

align-items: center;

}

header div:nth-of-type(2) {

display: flex;

gap: 20px;

cursor: pointer;

}

header div:nth-of-type(2) span:hover {

font-weight: bolder;

color: red;

}

.login-box {

/* transition: 2s all; */

display: none;

overflow: hidden;

width: 300px;

height: 200px;

background-color: #fff;

border: solid 1px orangered;

border-radius: 8px;

box-shadow: rgba(255, 0, 0, 0.5) 5px 5px 5px;

position: absolute;

left: 1150px;

top: 50px;

}

.login-box .header {

height: 40px;

background-color: orangered;

display: flex;

justify-content: space-between;

align-items: center;

color: white;

cursor: pointer;

padding: 0 10px;

}

</style>

</head>

<body>

<div class="container">

<header>

<div>

<span>欢迎访问OPENLAB EDU</span>

</div>

<div>

<span id="login">登录</span>

<span id="register">注册</span>

</div>

<div class="login-box" id="login-box">

<div class="header" id="header">

<span>会员登录</span>

<span id="close">[关闭]</span>

</div>

</div>

</header>

</div>

<script>

// 获取登录按钮

let _login = document.getElementById("login");

let _login_box = document.getElementById("login-box");

// 登录按钮添加事件

_login.onclick = function () {

//显示弹窗

_login_box.style.display = "block";

}

// 获取关闭按钮

let _colse = document.getElementById("close");

_colse.onclick = function () {

//隐藏弹窗

_login_box.style.display = "none";

}

//__________________________

//获取登录窗口标题

let _header = document.getElementById("header");

//文档中添加鼠标按下事件

document.onmousedown = function (event) {

//获取鼠标指针在标题上的偏移量(事件函数默认参数:事件对象)

let offsetX = event.offsetX;

let offsetY = event.offsetY;

//给窗口标题,添加鼠标移动的事件

_header.onmousemove = function(event2) {

//鼠标移动,获取新的坐标

let mouseX = event2.clientX;

let mouseY = event2.clientY;

// 计算登录窗口坐标

let loginX = mouseX - offsetX;

let loginY = mouseY - offsetY;

// ----------------- 边界判断

// 左边界

if (loginX <= 0) {

loginX = 0;

}

// 上边界

if (loginY <= 0) {

loginY = 0;

}

// 右边界

let iw = window.innerWidth; // 浏览器窗口宽度

let lw = getComputedStyle(_login_box).width; // 登录窗宽度

lw = parseInt(lw); // 转换数据类型

if (loginX >= (iw - lw)) {

loginX = iw - lw;

}

// 下边界

let ih = window.innerHeight;

let lh = getComputedStyle(_login_box).height; // 登录窗高度

lh = parseInt(lh); // 转换数据类型

if (loginY >= (ih - lh)) {

loginY = ih - lh;

}

//给登录窗口设置样式

_login_box.style.left = loginX + "px";

_login_box.style.top = loginY + "px";

}

}

//鼠标抬起事件:什么都不做

document.onmouseup = function () {

//清除了标题上的鼠标移动事件 --- 什么都不做

_header.onmousemove = null;

}

</script>

</body>

</html>

实现效果:

相关推荐
PineappleCoder4 小时前
还在重复下载资源?HTTP 缓存让二次访问 “零请求”,用户体验翻倍
前端·性能优化
拉不动的猪4 小时前
webpack编译中为什么不建议load替换ast中节点删除consolg.log
前端·javascript·webpack
李姆斯4 小时前
Agent时代下,ToB前端的UI和交互会往哪走?
前端·agent·交互设计
源码获取_wx:Fegn08954 小时前
基于springboot + vue健身房管理系统
java·开发语言·前端·vue.js·spring boot·后端·spring
闲谈共视5 小时前
基于去中心化社交与AI智能服务的Web钱包商业开发的可行性
前端·人工智能·去中心化·区块链
CreasyChan5 小时前
C# 反射详解
开发语言·前端·windows·unity·c#·游戏开发
JIngJaneIL5 小时前
基于Java+ vue智慧医药系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
阿蒙Amon6 小时前
JavaScript学习笔记:6.表达式和运算符
javascript·笔记·学习
hashiqimiya6 小时前
两个步骤,打包war,tomcat使用war包
java·服务器·前端
小a杰.7 小时前
Flutter 设计系统构建指南
开发语言·javascript·ecmascript