<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
* {margin: 0; padding: 0; }
body, textarea, select, input, button {font-size: 12px; color: #fff; font-family: Arial, Helvetica, sans-serif; -webkit-text-size-adjust: none;} .fl-l{float: left;}
.fl-r{float: right;} #dialog{
position: absolute;
top: 200px;
left: 400px;
width: 400px;
height: 200px;
background-color: #eaf6db;
border: 1px solid lightslategray;
}
.dialog-title{
height: 40px;
line-height: 40px;
background-color: #3a3333;
cursor: move;
}
.login, .close{
display: inline-block;
margin: 0 15px;
} </style>
</head>
<body>
<div id="dialog">
<div id="dialog-title" class="dialog-title">
<span class="fl-l login">登录</span>
<span class="fl-r close">X</span>
</div>
</div> <script>
// 获取DOM元素
var dialogTitle = document.getElementById('dialog-title')
var dialog = document.getElementById('dialog') // 初始化鼠标默认位置
var disX = 0, disY = 0 // 添加鼠标按下事件
dialogTitle.onmousedown = function(e) {
var e = e || event // 计算鼠标距离弹出框内的位置
disX = e.clientX - dialog.offsetLeft // 鼠标相对于浏览器窗口左上角的横向距离 - 弹出框距离页面左上角的横向偏移距离
disY = e.clientY - dialog.offsetTop // 鼠标相对于浏览器窗口左上角的纵向距离 - 弹出框距离页面左上角的纵向偏移距离 // 点击弹出框后拖动鼠标,移动弹出框
document.onmousemove = function(e) {
var e = e || event // 弹出框dialog距离窗口左上角的水平和纵向距离
var currentDialogDisX = e.clientX - disX
var currentDialogDisY = e.clientY - disY if(currentDialogDisX < 0) { // 弹出框紧贴窗口左边的情况
currentDialogDisX = 0
} else if(currentDialogDisX > document.documentElement.clientWidth - dialog.offsetWidth) { // 弹出框紧贴窗口右边的情况
currentDialogDisX = document.documentElement.clientWidth - dialog.offsetWidth
} if(currentDialogDisY < 0) { // 弹出框紧贴窗口上边的情况
currentDialogDisY = 0
} else if(currentDialogDisY > document.documentElement.clientHeight - dialog.offsetHeight) { // 弹出框紧贴窗口下边的情况
currentDialogDisY = document.documentElement.clientHeight - dialog.offsetHeight
} // 当鼠标移动时改变弹出框的位置
dialog.style.left = currentDialogDisX + 'px'
dialog.style.top = currentDialogDisY + 'px' } // 当点击鼠标拖动弹出框,抬起鼠标时
document.onmouseup = function() {
// 清除弹出框的移动事件及本身
document.onmousemove = null
document.onmouseup = null
} // 阻止默认事件,如果不加这个阻止默认事件,在 firefox 下会有一个获取焦点的光标一直在闪动,在3.0及以下会出现拖动出现重影的情况
return false
}
</script>
</body>
</html>

JavaScript实现登录窗口的拖拽的更多相关文章

  1. 第一百三十七节,JavaScript,封装库---修缮拖拽

    JavaScript,封装库---修缮拖拽 修缮拖拽 /** tuo_zhuai()方法,将一个弹窗元素实现拖拽功能 * 注意:有参设置拖拽点区块,只有弹窗的这个拖拽点区块才能拖拽,无参整个弹窗可以拖 ...

  2. Javascript 事件对象进阶(二)拖拽的应用 - 登录框的拖拽

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. JavaScript实现最简单的拖拽效果

    一.一些无关痛痒的唠叨 拖拽还是挺不错的一个页面效果,我个人认为,其生命力在于可以让用户自己做一些操作,所谓自定义.例如: ①浏览器标签顺序的拖拽切换 现在基本上所有的选项卡式的浏览器都有顺序拖拽切换 ...

  4. WPF.UIShell UIFramework之自定义窗口的深度技术 - 模态闪动(Blink)、窗口四边拖拽支持(WmNCHitTest)、自定义最大化位置和大小(WmGetMinMaxInfo)

    无论是在工作和学习中使用WPF时,我们通常都会接触到CustomControl,今天我们就CustomWindow之后的一些边角技术进行探讨和剖析. 窗口(对话框)模态闪动(Blink) 自定义窗口的 ...

  5. 原生JS实现弹出窗口的拖拽

    上一篇说了一下弹出窗口功能的实现思路,一般情况下紧接着就会需要做到弹窗的移动,当然现在有很插件.库比如hammer可以使用,效率也非常好.但我觉得还是有必要了解一下原生JS的实现思路及方式,如下: 思 ...

  6. Qt-网易云音乐界面实现-1 窗口隐藏拖拽移动,自定义标题栏

    最近也换了公司,也换了新的工作,工资也象征性的涨了一点点,但是最近心里还是慌慌,不知道为什么,没有那种踏实感,感觉自己随时可以被抛弃的感觉.感觉自己在荒废时间,也感觉自己在浪费生命. 为了让自己在被抛 ...

  7. JavaScript实现网页元素的拖拽效果

    以下的页面中放了两个div,能够通过鼠标拖拽这两个元素到任何位置. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamFja2ZydWVk/font/5a6 ...

  8. electron关于无边框窗口无法拖拽移动以及点击事件失效的问题

    为了使窗口无边框,使得在某些时候让项目看起来更美观,所以在创建窗口的时候通过设置 frame 属性的值为 false 来创建无边框窗口.但是无边框窗口会产生无法移动的问题,对于这个问题我们可以在渲染进 ...

  9. javascript事件类型之界面拖拽交互

    一.在线DEMO 界面拖拽交互

随机推荐

  1. Page.ClientScript.RegisterStartupScript用法小结

    使用类型.键.脚本文本和指示是否添加脚本标记的布尔值向 Page 对象注册启动脚本. 参数 type 要注册的启动脚本的类型. key 要注册的启动脚本的键. script 要注册的启动脚本文本. a ...

  2. StringBuffer与StringBuilder

    有些时候,需要由较短的字符串构建字符串.比如,按键或来自文件中的单词.采用字符串连接的方式达到此目的效率比较低.每次连接字符串的时候,都会构建一个新的String对象,既耗时,又浪费空间.使用Stri ...

  3. Java批量压缩下载

    最近做了一些有关批量压缩下载的功能,网上也找了一些资源,但都不是太全面,所以自己整理一份,已备不时之需. 直接上代码: // 获取项目路径 private static String WEBCLASS ...

  4. Java 领域从传统行业向互联网转型你必须知道的事儿

    我为什么要写这篇文章 武林中,"天下武功出少林"指各门各派的武功都与少林武学有一定的渊源,技术也是相同的道理,对于Java领域的应用而言,传统行业与互联网行业的技术都来自J2SE和 ...

  5. 在webpack里使用jquery.mCustomScrollbar插件

    malihu-custom-scrollbar-plugin是一个依赖jquery的自定义网页滚动条样式插件 网站:http://manos.malihu.gr/jquery-custom-conte ...

  6. 微机原理基础(五)—— MSP430

    一.MSP430组成 1.结构简图 2.具体组成框图

  7. 理解主从设备模式(Master-Slave)

    前言 在给定上下文的软件体系结构中,为了解决某些经常出现的问题而形成的通用且可重用的解决方案称之为架构模式,而常见的体系架构模式主要有以下十种 分层模式 客户端-服务器模式 主从设备模式 管道-过滤器 ...

  8. css3 绘制图形

    星形: .star-six { width:; height:; border-left: 50px solid transparent; border-right: 50px solid trans ...

  9. hibernate入门-基本配置及简单的crud操作

    框架来说主要是需要写大量的配置文件,hibernate相比mybatis来说更强大,移植性更好: 1.类和数据库的映射配置:配置文件命名一般--类名.hbm.xml (user.hbm.xml),与实 ...

  10. 【BZOJ 3569】 DZY Loves Chinese II

    题目连接: 传送门 题解: 先%一发大佬的题解. 考虑一个图,删除一些边以后不连通的条件为,某个联通块与外界所有连边都被删掉,而不只是生成树中一个树边与所以覆盖它的非树边(很容易举出反例). 那么考虑 ...