js实现百度登录框鼠标拖拽效果
发布时间 - 2026-01-11 00:03:05 点击率:次以百度的登录窗口为例,学习鼠标拖拽效果如何实现,拖拽范围限定以及登录窗口自动居中。学会如何制作弹出窗口特效,了解把元素设置为可拖拽的原理。

知识点:
1.掌握对可拖拽对话框的实现原理
2.了解元素如何触发脚本方法以及如何编写侦听事件
3. 学会设置元素在页面中居中和全屏
注意区别:
1.screenX:鼠标位置相对于用户屏幕水平偏移量,而screenY也就是垂直方向的,此时的参照点也就是原点是屏幕的左上角。
2.clientX:跟screenX相比就是将参照点改成了浏览器内容区域的左上角,该参照点会随之滚动条的移动而移动。
3.pageX:参照点也是浏览器内容区域的左上角,但它不会随着滚动条而变动。
鼠标事件:
鼠标事件1 - 在标题栏上按下(要计算鼠标相对拖拽元素的左上角的坐标,并且标记元素为可拖动)
鼠标事件2 - 鼠标移动时(要检测元素是否标记为可移动,如果是,则更新元素的位置到当前鼠标的位置【ps:要减去第一步中获得的偏移】)
鼠标事件3 - 鼠标松开的时候(标记元素为不可拖动即可)
效果:
完整代码及注释:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<style type="text/css">
*{
margin: 0;
padding: 0;
list-style: none;
}
.main{
width: 600px;
height: 320px;
margin: 0 auto;
margin-top: 80px;
margin-left: 400px;
}
.img{
text-align: center;
}
.item1{
margin-left: 115px;
width: 600px;
}
.item1 li{
float: left;
width: 50px;
}
.text{
width: 600px;
margin-left: 80px;
margin-top: 5px;
}
.text .txt{
width: 450px;
height: 30px;
}
.text .btn{
width: 70px;
height: 30px;
cursor: pointer;
}
.item2{
width: 600px;
margin-left: 200px;
margin-top: 30px;
}
.item2 li{
float: left;
margin-left: 10px;
}
.link{
text-align: right;
line-height: 30px;
padding-right: 40px;
}
.logmove{
width: 380px;
height: auto;
background: #fff;
}
.Box{
width: 380px;
height: auto;
position: absolute;
left: 100px;
top: 100px;
border: 1px solid #d5d5d5;
z-index: 9000;
background: #fff;
display: none;
}
.title{
height: 48px;
line-height: 48px;
color: #535353;
background: #f5f5f5;
padding: 0px 20px;
font-size: 16px;
border-bottom: 1px solid #efefef;
cursor: move;
user-select: none;
}
.title .closebtn{
display: block;
width: 16px;
height: 16px;
position: absolute;
top: 15px;
right: 20px;
background: url("img/close_def.png") no-repeat;
cursor: pointer;
}
.title .closebtn:hover{
background: url("img/close_hov.png");
}
.content{
padding: 15px 20px;
}
.Input{
padding-top: 15px;
}
.txt1,.txt2,.Input{
height: 40px;
line-height: 40px;
text-align: right;
}
.username,.password{
width: 100%;
height: 40px;
margin: 0px;
padding: 0px;
border: 1px solid #c1c1c1;
text-indent: 25px;
outline: none;
}
.username{
background: url("img/input_username.png") no-repeat 2px;
}
.password{
background: url("img/input_password.png") no-repeat 2px;
}
.submit{
width: 100%;
height: 50px;
background: #3b7ae3;
border: none;
font-size: 16px;
color: #fff;
outline: none;
text-decoration: none;
display: block;
text-align: center;
line-height: 50px;
}
.submit:hover{
background: #3f81b0;
}
.mask{
width: 100%;
height: 100%;
background: #000;
position: absolute;
top: 0;
left: 0;
z-index: 8000;
opacity: 0.4;
filter: Alpha(opacity=40);
display: none;
}
</style>
<script type="text/javascript">
window.onload=function(){
//获取元素对象
function g(id){
return document.getElementById(id);
}
//自动居中 - 登录浮层 ( el = Element)
function autoCenter(el){
var bodyW = document.documentElement.clientWidth;//网页可视区域
var bodyH = document.documentElement.clientHeight;
var elW = el.offsetWidth;//登录框的宽度
var elH = el.offsetHeight;
el.style.left = (bodyW - elW) / 2 + 'px';//实现居中
el.style.top = (bodyH - elH) / 2 + 'px';
}
//自动全屏 - 遮罩
function fillToBody(el){
el.style.width = document.documentElement.clientWidth + 'px';
el.style.height = document.documentElement.clientHeight + 'px';
}
var mouseOffsetX = 0;//鼠标偏移量
var mouseOffsetY = 0;
var isDraging = false;
//鼠标事件1 - 在标题栏上按下(要计算鼠标相对拖拽元素的左上角的坐标,并且标记元素为可拖动)
g('title').addEventListener('mousedown',function(e){
var e = e||window.event;
mouseOffsetX = e.pageX - g('Box').offsetLeft;
mouseOffsetY = e.pageY - g('Box').offsetTop;
isDraging = true;
})
//鼠标事件2 - 鼠标移动时(要检测元素是否标记为可移动,如果是,则更新元素的位置到当前鼠标的位置【ps:要减去第一步中获得的偏移】)
document.onmousemove = function(e){
var e = e||window.event;
var mouseX = e.pageX;//鼠标当前位置
var mouseY = e.pageY;
var moveX = 0;//浮层元素的新位置
var moveY = 0;
if(isDraging === true){
moveX = mouseX - mouseOffsetX;
moveY = mouseY - mouseOffsetY;
//拖拽范围限定 moveX > 0 并且 moveX < (页面最大宽度 - 浮层的宽度)
// moveY > 0 并且 moveY < (页面最大高度 - 浮层的高度)
var pageWidth = document.documentElement.clientWidth;//页面宽度
var pageHeight = document.documentElement.clientHeight;
var BoxWidth = g('Box').offsetWidth;
var BoxHeight = g('Box').offsetHeight;
var maxX = pageWidth - BoxWidth;
var maxY = pageHeight - BoxHeight;
moveX = Math.max(0,moveX);//实际上就是获得moveX的所有正数值,也就是规定范围的下限值
moveX = Math.min(maxX,moveX);//实际上就是规定了moveX的上限值
moveY = Math.max(0,moveY);
moveY = Math.min(maxY,moveY);
/*
moveX =Math.min(maxX, Math.max(0,moveX));
moveY =Math.min(maxY, Math.max(0,moveY));
*/
g('Box').style.left = moveX + 'px';
g('Box').style.top = moveY + 'px';
}
}
//鼠标事件3 - 鼠标松开的时候(标记元素为不可拖动即可)
document.onmouseup = function(){
isDraging = false;
}
function showBox(){
g('Box').style.display = 'block';
g('mask').style.display = 'block';
autoCenter(g('Box'));
fillToBody(g('mask'));
}
function hideBox(){
g('Box').style.display = 'none';
g('mask').style.display = 'none';
}
g('log').onclick = function(){
showBox();
}
g('close').onclick = function(){
hideBox();
}
/*窗口改变大小时的处理
1.保持登录浮层居中
2.保持遮罩的全屏,使之不会出现滚动条
*/
window.onresize = function(){
autoCenter(g('Box'));
fillToBody(g('mask'));
}
}
</script>
<body>
<div class="link"><a href="#" id="log">登录</a></div>
<div class="main">
<div class="img"><img src="img/baidu.png" /></div>
<div class="item1">
<ul>
<li><a href="#">新闻</a></li>
<li><a href="#">网页</a></li>
<li><a href="#">贴吧</a></li>
<li><a href="#">知道</a></li>
<li><a href="#">音乐</a></li>
<li><a href="#">图片</a></li>
<li><a href="#">视频</a></li>
<li><a href="#">地图</a></li>
</ul>
</div>
<div class="text">
<br/>
<input type="text" class="txt">
<input type="button" value="百度一下" class="btn">
</div>
<div class="item2">
<ul>
<li><a href="#">百科</a></li>
<li><a href="#">文库</a></li>
<li><a href="#">hao123</a></li>
<li><a href="#">更多>></a></li>
</ul>
</div>
</div>
<div class="mask" id="mask"></div>
<div class="Box" id="Box">
<div class="logmove" id="logmove" onselect="return false">
<div class="title" id="title">
登录通行证<a href="#" class="closebtn" id="close"></a>
</div>
</div>
<div class="content">
<div class="Input">
<input class="username" type="text" placeholder="手机/邮箱/用户名">
</div>
<div class="Input">
<input class="password" type="text" placeholder="密码">
</div>
<div class="txt1">
<a href="#">忘记密码</a>
</div>
<div>
<a href="#" class="submit">登录</a>
</div>
<div class="txt2">
<a href="#">立即注册</a>
</div>
</div>
</div>
</body>
</html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js百度登录框鼠标拖拽
# js登录框鼠标拖拽
# js鼠标拖拽
# 原生JS实现可拖拽登录框
# Javascript实现登录框拖拽效果
# js实现登录框鼠标拖拽效果
# 百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8
# Firefox
# Chrome
# javascript 网页编辑框及拖拽图片的问题
# js实现弹出框的拖拽效果实例代码详解
# 使用纯JS实现checkbox的框选效果(鼠标拖拽多选)
# JavaScript实现模态框拖拽效果
# HTML+CSS+JavaScript实现可拖拽模态框
# javascript实现登录框拖拽
# 鼠标
# 拖拽
# 拖动
# 全屏
# 滚动条
# 按下
# 则更
# 限值
# 栏上
# 偏移量
# 忘记密码
# 为例
# 使之
# 相对于
# 但它
# 设置为
# 贴吧
# 对话框
# 大家多多
# 如何实现
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript如何实现倒计时_时间函数如何精确控制
JavaScript中的标签模板是什么_它如何扩展字符串功能
bing浏览器学术搜索入口_bing学术文献检索地址
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
Laravel怎么使用artisan命令缓存配置和视图
canvas 画布在主流浏览器中的尺寸限制详细介绍
如何在万网开始建站?分步指南解析
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
音响网站制作视频教程,隆霸音响官方网站?
如何用低价快速搭建高质量网站?
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
制作企业网站建设方案,怎样建设一个公司网站?
Laravel如何处理和验证JSON类型的数据库字段
Laravel如何实现API资源集合?(Resource Collection教程)
如何在 Pandas 中基于一列条件计算另一列的分组均值
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
WEB开发之注册页面验证码倒计时代码的实现
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
java获取注册ip实例
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
公司网站制作价格怎么算,公司办个官网需要多少钱?
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
Laravel storage目录权限问题_Laravel文件写入权限设置
Laravel怎么使用Intervention Image库处理图片上传和缩放
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
如何在搬瓦工VPS快速搭建网站?
香港服务器如何优化才能显著提升网站加载速度?
大型企业网站制作流程,做网站需要注册公司吗?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
常州企业网站制作公司,全国继续教育网怎么登录?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
如何有效防御Web建站篡改攻击?
JavaScript常见的五种数组去重的方式
如何在香港免费服务器上快速搭建网站?
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
bootstrap日历插件datetimepicker使用方法
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
三星网站视频制作教程下载,三星w23网页如何全屏?
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
微信推文制作网站有哪些,怎么做微信推文,急?
微信小程序 require机制详解及实例代码
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤

