js实现登录框鼠标拖拽效果


Posted in Javascript onMarch 09, 2017

效果图:

js实现登录框鼠标拖拽效果

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>登录框鼠标拖拽效果</title>
 <style type="text/css">
 body {
  background: url("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488778794834&di=e97c96dfe7860297d1968c30adc862a2&imgtype=0&src=http%3A%2F%2Fpic1.5442.com%3A82%2F2015%2F0409%2F01%2F15.jpg%2521960.jpg") no-repeat top center #ffffff;
  background-size: 100%;
  padding: 0;
  margin: 0;
  font-size: 12px;
  font-family: "微软雅黑", sans-serif;
 }
 .ui-dialog {
  width: 380px;
  position: absolute;
  z-index: 9000;
  top: 100px;
  left: 100px;
  border: 1px solid #d5d5d5;
  background-color: #ffffff;
  /*display: none;*/
 }
 .ui-dialog-title {
  height: 48px;
  line-height: 48px;
  padding-left: 20px;
  color: #535353;
  font-size: 16px;
  background-color: #f5f5f5;
  border-bottom: 1px solid #efefef;
  cursor: move;
 }
 .ui-dialog-title-closebutton {
  width: 16px;
  height: 16px;
  display: inline-block;
  position: absolute;
  right: 20px;
  color: #000;
  text-decoration: unset;
 }
 .ui-dialog-title-closebutton:hover {
  color: #4ca8ff;
 }
 .ui-dialog-content {
  padding: 15px 20px;
 }
 .ui-dialog-pt15 {
  padding-top: 15px;
 }
 .ui-dialog-l40 {
  height: 40px;
  line-height: 40px;
  text-align: right;
 }
 .ui-dialog-input {
  width: 100%;
  height: 40px;
  margin: 0;
  padding: 0;
  border:1px solid #d5d5d5;
  font-size: 16px;
  color: #c1c1c1;
  text-indent: 25px;
  outline: none;
 }
 .ui-dialog-input-username {
  background: url("images/input_username.png") no-repeat 2px;
 }
 .ui-dialog-input-password {
  background: url("images/input_password.png") no-repeat 2px;
 }
 .ui-dialog-submit {
  width: 100%;
  height: 50px;
  background: #3b7ae3;
  border: none;
  font-size: 16px;
  color: #ffffff;
  outline: none;
  text-decoration: none;
  display: block;
  text-align: center;
  line-height: 50px;
 }
 .ui-dialog-submit:hover {
  background: #3f81b0;
 }
 .ui-mask {
  width: 100%;
  height: 100%;
  background: #000;
  opacity: 0.4;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 8000;
  display: none;
 }
 .link {
  text-align: right;
  line-height: 20px;
  padding-right: 40px;
 }
 </style>
</head>
<body>
 <div class="ui-dialog" id="dialog">
 <div class="ui-dialog-title" id="dialogTitle">
  登录
  <!-- 右上角的关闭按钮 -->
  <a href="javascript:hideDialog();" rel="external nofollow" class="ui-dialog-title-closebutton">X</a>
 </div>
 <div class="ui-dialog-content">
  <div class="ui-dialog-l40 ui-dialog-pt15">
  <input class="ui-dialog-input ui-dialog-input-username" type="input" placeholder="手机/邮箱/用户名" />
  </div>
  <div class="ui-dialog-l40 ui-dialog-pt15">
  <input class="ui-dialog-input ui-dialog-input-password" type="input" placeholder="密码" />
  </div>
  <div class="ui-dialog-l40">
  <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >忘记密码</a>
  </div>
  <div>
  <a class="ui-dialog-submit" href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >登录</a>
  </div>
  <div class="ui-dialog-l40">
  <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >立即注册</a>
  </div>
 </div>
 </div>
 <div class="ui-mask" id="mask"></div>
 <div class="link">
 <a href="javascript:showDialog();" rel="external nofollow" style=" text-decoration: unset;color: #4ca8ff">登录</a>
 </div>
 <script type="text/javascript">
 // 获取元素对象
 function g(id) {
  return document.getElementById(id);
 }
 // 自动居中函数 -- 登录浮层
 // el {Element}
 function autoCenter(el) {
  // 获得可视区域的宽和高
  var bodyW = document.documentElement.clientWidth;
  var bodyH = document.documentElement.clientHeight;
  // 获得元素 el 的宽和高
  var elW = el.offsetWidth;
  var elH = el.offsetHeight;
  // 设置元素的 style 样式
  el.style.left = (bodyW - elW) / 2 + 'px';
  el.style.top = (bodyH - elH) / 2 + 'px';
 }
 // 扩展元素到整个可视区域 -- 遮罩层
 // el {Element}
 function fillToBody(el) {
  // 将元素的宽和高设置的和可视区域一样
  el.style.width = document.documentElement.clientWidth + 'px';
  el.style.height = document.documentElement.clientHeight + 'px';
 }
 // 定义全局变量
 var mouseOffsetX = 0;
 var mouseOffsetY = 0;
 var isDragging = false;
 // 鼠标事件1 -- 在标题栏上按下
 // 计算鼠标相对拖拽元素的的左上角的坐标, 并且标记元素为可拖动
 g('dialogTitle').addEventListener('mousedown', function(e) {
  var e = e || window.event;
  // 用鼠标按下时的坐标减去 dialog 的左上角坐标
  mouseOffsetX = e.pageX - g('dialog').offsetLeft;
  mouseOffsetY = e.pageY - g('dialog').offsetTop;
  isDragging = true;
 });
 // 鼠标事件2 -- 鼠标移动
 document.onmousemove = function(e) {
  var e = e || window.event;
  // 鼠标当前位置
  var mouseX = e.pageX;
  var mouseY = e.pageY;
  // 鼠标从单击时至当前时刻移动的距离
  var moveX = 0;
  var moveY = 0;
  if (isDragging === true) {
  moveX = mouseX - mouseOffsetX;
  moveY = mouseY - mouseOffsetY;
  // 范围限定
  // moveX > 0 且 moveX < (页面最大宽度 - 浮层宽度)
  // moveY > 0 且 moveY < (页面最大宽度 - 浮层高度)
  var pageWidth = document.documentElement.clientWidth;
  var pageHeight = document.documentElement.clientHeight;
  // 登录浮层的宽、高
  var dialogWidth = g('dialog').offsetWidth;
  var dialogHeight = g('dialog').offsetHeight;
  var maxX = pageWidth - dialogWidth;
  var maxY = pageHeight - dialogHeight;
  moveX = Math.min(maxX, Math.max(0, moveX));
  moveY = Math.min(maxY, Math.max(0, moveY));
  g('dialog').style.left = moveX + 'px';
  g('dialog').style.top = moveY + 'px';
  }
 };
 // 鼠标事件3 -- 鼠标松开
 document.onmouseup = function() {
  isDragging = false;
 };
 // 展现登录浮层
 function showDialog() {
  g('dialog').style.display = 'block';
  g('mask').style.display = 'block';
  autoCenter(g('dialog'));
  fillToBody(g('mask'));
 }
 // 隐藏登录浮层
 function hideDialog() {
  g('dialog').style.display = 'none';
  g('mask').style.display = 'none';
 }
 window.onresize = function() {
  autoCenter(g('dialog'));
  fillToBody(g('mask'));
 };
 showDialog();
 autoCenter(g('dialog'));
 </script>
</body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JQuery 浮动导航栏实现代码
Aug 27 Javascript
js 设置选中行的样式的实现代码
May 24 Javascript
JQuery select(下拉框)操作方法汇总
Apr 15 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
Jun 21 Javascript
微信小程序 navbar实例详解
May 11 Javascript
简单实现js放大镜效果
Jul 24 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
Dec 14 Javascript
vue源码学习之Object.defineProperty对象属性监听
May 30 Javascript
vue.js响应式原理解析与实现
Jun 22 Javascript
Vue清除定时器setInterval优化方案分享
Jul 21 Javascript
全面解析JavaScript Module模式
Jul 24 Javascript
JavaScript前端面试组合函数
Jun 21 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
Mar 09 #Javascript
基于vue实现分页/翻页组件paginator示例
Mar 09 #Javascript
vue.js利用Object.defineProperty实现双向绑定
Mar 09 #Javascript
javascript遍历json对象的key和任意js对象属性实例
Mar 09 #Javascript
微信小程序 五星评价功能的实现
Mar 09 #Javascript
javascript实现数据双向绑定的三种方式小结
Mar 09 #Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
Mar 09 #Javascript
You might like
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
jquery 上下滚动广告
2009/06/17 Javascript
浅谈Javascript鼠标和滚轮事件
2012/06/27 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
Python的迭代器和生成器使用实例
2015/01/14 Python
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
深入理解Python中装饰器的用法
2016/06/28 Python
深入理解Python装饰器
2016/07/27 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
python跨文件使用全局变量的实现
2020/11/17 Python
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
给全校老师的建议书
2014/03/13 职场文书
追悼会主持词
2014/03/20 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
车间安全生产管理制度
2015/08/06 职场文书
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs