界面如图所示:

要求:在“信息注册”栏,按下鼠标,然后鼠标在页面移动,在鼠标移动过程中,该窗口跟着鼠标移动,当鼠标松开的时候,窗口停止移动。点击“关闭”,该窗口隐藏。

实现思路:

1.页面结构分析:一个大盒子d-box来确定位置,里面放一个小盒子drop(存放“注册信息(可以拖拽”文字和span标签,span存放“关闭”,id为box_close),鼠标在drop中按下,移动时候d-box跟着移动。

2.实现分析:

2.1 获取鼠标在盒子中的位置。通过鼠标在页面中的位置-盒子在页面的位置实现

①鼠标在页面的位置实现代码:

var x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);

var y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop);

  ②盒子在页面中位置实现代码:

    var box_x=box.offsetLeft;

    var box_y=box.offsetTop;

  ③鼠标在盒子中的位置实现代码:

    var mouse_in_box_x=x-box_x;

    var mouse_in_box_y=y-box_y;

2.2 获取鼠标移动时盒子移动的位置。通过鼠标移动时,鼠标在页面的位置-鼠标在盒子中的位置实现。

    ①鼠标在页面的位置

var x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);

var y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop);

  ②鼠标移动时盒子移动的位置代码实现:

   var boxX=x-mouse_in_box_x;

var boxY=y-mouse_in_box_y;

2.3 给盒子样式赋值

   box.style.left=boxX+'px';

     box.style.top=boxY+'px';

3.注意:

①要移动的盒子,其pisition必须赋值,absolute或者relative,必须使其脱离文档流才能移动

②给盒子样式赋值时,一定要注意不能丢掉px单位

③事件对象e,位置e.pageX,滚动条滚动距离的兼容性。以前的博文里面有记录,完整代码中也做了处理。

完整代码如下:

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>鼠标拖拽案例</title> <style type="text/css">
*{
margin: 0px;
padding: 0px;
} .d-box{
width: 400px;
height: 300px;
border: 5px solid #eee;
box-shadow: 2px 2px 2px 2px #666;
position: absolute;
top: 40%;
left: 40%;
background-color: white;
} .hd{
height: 25px;
background-color: #7c9299;
color: white;
line-height: 25px;
cursor: move;
border-bottom: 1px solid #369;
}
#box_close{
float: right;
cursor: pointer;
}
</style>
</head>
<body>
<div id="d-box" class="d-box">
<div id="drop" class="hd">注册信息(可以拖拽)
<span id="box_close">【关闭】</span>
</div>
</div> <!-- 插入JS代码 -->
<script type="text/javascript">
/****************************盒子拖拽功能********************************/
//点击拖拽的“注册信息栏”,拖动整个盒子的移动。首先获得要拖拽的盒子
var box=document.getElementById('d-box');
var drop=document.getElementById('drop');
drop.onmousedown=function(e){
e = e || window.event;
//当鼠标按下的时候,获得鼠标在盒子中的位置
//鼠标在盒子中的位置=鼠标在页面中的位置-盒子在页面的位置
//鼠标在页面中的位置
var x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
var y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop); //盒子在页面中的位置
var box_x=box.offsetLeft;
var box_y=box.offsetTop;
//鼠标在盒子中的位置
var mouse_in_box_x=x-box_x;
var mouse_in_box_y=y-box_y; //注册鼠标移动事件,因为鼠标按下后,在页面移动,盒子跟着移动
document.onmousemove=function(e){
e = e || window.event;
//鼠标在页面中移动时,求盒子的坐标
//鼠标移动时盒子移动位置=鼠标当前位置-鼠标在盒子中移动的距离
x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop); var boxX=x-mouse_in_box_x;
var boxY=y-mouse_in_box_y;
//px一定不能忘
box.style.left=boxX+'px';
box.style.top=boxY+'px';
}
} //当鼠标弹起时,移出鼠标移动事件
drop.onmouseup=function(){
document.onmousemove=null;
} //点击关闭盒子,隐藏盒子
var box_close=document.getElementById('box_close');
box_close.onclick=function(){
box.style.display='none';
}
</script>
</body>
</html>

javascript--鼠标拖拽窗口案例(鼠标按下,在鼠标移动过程中,盒子跟着一起移动,鼠标松开,盒子停止移动)的更多相关文章

  1. javascript鼠标拖拽的那些事情

    <html> <head> <title>javascript鼠标拖拽的那些事情</title> <meta http-equiv="C ...

  2. day50—JavaScript鼠标拖拽事件

    转行学开发,代码100天——2018-05-05 今天通过鼠标拖拽事件复习巩固一下鼠标事件. 鼠标拖拽事件需要记住两点: 1.距离不变 2.鼠标事件(按下,移动,抬起) <div id=&quo ...

  3. JavaScript鼠标拖拽特效及相关问题总结

    #div1{width:200px;height:200px;background:red;position:absolute;} #div2{width:200px;height:200px;bac ...

  4. js - 面向对象 - 小案例:轮播图、随机点名、选项卡、鼠标拖拽

    面向对象 对象 : (黑盒子)不了解内部结构, 知道表面的各种操作. 面向对象 : 不了解原理的情况下 会使用功能 . 面向对象是一种通用思想,并非编程中能用,任何事情都能用. 编程语言的面向对象的特 ...

  5. 鼠标拖拽定位和DOM各种尺寸详解

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. CSharpGL(20)用unProject和Project实现鼠标拖拽图元

    CSharpGL(20)用unProject和Project实现鼠标拖拽图元 效果图 例如,你可以把Big Dipper这个模型拽成下面这个样子. 配合旋转,还可以继续拖拽成这样. 当然,能拖拽的不只 ...

  7. JS Event 鼠标拖拽事件

    <!DOCTYPE html><html> <head>        <meta charset="UTF-8">         ...

  8. 鼠标拖拽移动Java界面组件

    默认的,Frame或者JFrame自身已经实现了鼠标拖拽标题栏移动窗口的功能. 只是,当你不满意java的JFrame样式,隐藏了标题栏和边框,又或者干脆直接使用JWindow,那你又该怎么实现鼠标拖 ...

  9. 完美实现鼠标拖拽事件,解决各种小bug,基于jquery

    鼠标拖拽事件是web中使用频率极高的事件,之前写过的代码包括网上的代码,总存在各种各样的问题,包括拖拽体验差,松开鼠标后拖拽效果仍存在以及代码冗余过大等 本次我才用jQuery实现一个尽可能高效的拖拽 ...

随机推荐

  1. css居中那些事

    一.css垂直居中 1.line-height(适用于单行文本居中) eg:  html:<p class="wordp">123</p>- css: .w ...

  2. ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 4、安装 ArcGIS for Server

    安装ArcGIS for Server 解压server安装包,tar -xzvf ArcGIS_Server_Linux_1051_156429.tar.gz 切换到arcgis账户静默安装serv ...

  3. Eclipse 各版本名称的由来

    2001年11月7日 ,Eclipse 1.0发布 半年之后,2002年6月27日Eclipse进入了2.0时代.2.0时代的Eclipse经历了2.0和2.1两个大的版本.其中2.0在 之后又推出了 ...

  4. list 和 iterate

    list 和 iterate 不同之处 a) list取所有: b) iterate 先取ID,等到用到的时候再根据ID来取对象: c) session 中 list 第二次发出,仍会到数据库查询: ...

  5. 龙珠直播之swot

    版本 v 0.3 龙珠直播有品牌优势,依托于苏宁PPTV,有大背景,有体育视频资源可用. 龙珠内容没有特色,没有特别火的亮点,定位于体育,没有免费路线,不能吸引大量活跃用户,女主播方式也没十分特点,解 ...

  6. Python3基本数据类型(三、列表)

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字-它的位置,或索引,第一个索引是0,第二个索引是1,以此类推.Python有6个序列的内置类型,但最常见的是列表和元组.序列都可以进 ...

  7. python核心编程中网络爬虫的例子

    #!/usr/bin/env python import cStringIO # import formatter # from htmllib import HTMLParser # We use ...

  8. 新手理解HTML、CSS、javascript之间的关系-修订

    几年前写过一篇博文 <新手理解HTML.CSS.javascript之间的关系>,没想到网上出现了不少转载,当时没有太用心,里面的很多内容有待商榷,这里发布重新发布一篇. 网页主要有三部分 ...

  9. 【[POI2012]PRE-Prefixuffix】

    这道题真是非常蛇皮,卡自然溢出,还非常丧病的卡双自然溢出 一句话题意,求出最长的前缀后缀满足\(AB.........BA\)的形式 也就是说外面一个\(next\),里面一个\(next\) 本来想 ...

  10. 【[HAOI2016]找相同字符】

    其实这道题跟[AHOI2013]差异很像 其实这个问题的本质就是让你算所有后缀的\(lcp\)长度之和,但是得来自两个不同的字符串 先把两个字符串拼起来做一遍\(SA\),由于我们多算了来自于同一个串 ...