第三次作业

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

实现代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</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 {
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">
<!-- 页头 -->
<!-- <div class="header"></div> -->
<!-- H5语义化标签,表示开发页头部分 -->
<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 _close = document.getElementById("close");
_close.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 + "px";
let loginY = mouseY - offsetY + "px";
// 给登录窗口设置样式
_login_box.style.left = loginX;
_login_box.style.top = loginY;
}
}
// 鼠标按键抬起事件:什么都不做
document.onmouseup = function () {
// 清除了标题上的鼠标移动事件 - 什么都不做
_header.onmousemove = null;
}
</script>
</body>
</html>

效果图展示:

相关推荐
小满zs几秒前
Next.js第二十五章(CSS方案)
开发语言·javascript·css
Charlie_lll2 分钟前
学习Three.js–星环粒子(ShaderMaterial)
前端·three.js
wuhen_n6 分钟前
JavaScript事件循环(下) - requestAnimationFrame与Web Workers
开发语言·前端·javascript
我是ed.8 分钟前
Vue3 音频标注插件 wavesurfer
前端·vue.js·音视频
铁蛋AI编程实战15 分钟前
Gemini in Chrome 全实战:解锁+API调用+自定义扩展+本地推理
前端·人工智能·chrome
Hexene...22 分钟前
【前端Vue】出现elementui的index.css引入报错如何解决?
前端·javascript·vue.js·elementui
红色的小鳄鱼23 分钟前
Vue 监视属性 (watch) 超全解析:Vue2 Vue3
前端·javascript·css·vue.js·前端框架·html5
web小白成长日记23 分钟前
Vue-实例从 createApp 到真实 DOM 的挂载全历程
前端·javascript·vue.js
晚霞的不甘23 分钟前
Flutter for OpenHarmony实现高性能流体粒子模拟:从物理引擎到交互式可视化
前端·数据库·经验分享·flutter·microsoft·计算机视觉
晚霞的不甘23 分钟前
Flutter for OpenHarmony 流体气泡模拟器:用物理引擎与粒子系统打造沉浸式交互体验
前端·flutter·ui·前端框架·交互