界面如图所示:

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

实现思路:

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. 安装Android Studio的问题

    大陆墙内安装最新Android Studio多出了很多问题,不使用VPN的话,注意以下问题: 1 一直停留在fetching Android sdk compoment information界面 A ...

  2. 使用CKRule实现促销管理系统

    1, 常见的促销模型 促销管理系统在很多地方都有使用,大家去超市就经常体现到,感受到,不少中小型单位都其促销活动,要搞促销活动最好是有应用软件支持,这样就比较灵活管理也方便.而依靠手工处理的话效率会比 ...

  3. Web开发——前后台异步调用

    做web开发,最头疼的.最核心的部分或许就应该是前后台交互了,之前一直没弄明白,每次都不知道该如何去做.最近由于开发需要,加上有些朋友问起这个问题,不得不再次摸索前后台交互的方法.功夫不负有心人,总算 ...

  4. Xshell连接不上虚拟机的问题和解决办法

    第一次用xshell,一直连不上linux,搞了好久,也查了很多办法,但是最后也终于解决了,在这里我分享一下自己的解决办法,再列举网上的办法,希望可以帮助其他人. 1,你的linux ip地址没有配置 ...

  5. IT集中监控

    监控的从底层到上应该是: 一 数据采集层 二 数据处理层 三 数据展示层 监控需要和ITIL中定义的服务进行相当多的交互,例如监控会使用配置管理数据库CMDB来记录和读取数据,会将事件处理方式从知识库 ...

  6. Java IntelliJ IDEA 不能显示项目里的文件结构的解决方案

    按下列步骤操作:1. 关闭IDEA2.然后删除项目文件夹下的.idea文件夹3.重新用IDEA工具打开项目

  7. Android端访问服务器核心代码

  8. apache--配置文件属性介绍

    Apache apache是众多web服务器中的一员,其它web服务器还有什么nginx.Sun.Microsoft等等. 接下来我们主要讲解一下Apache 网站分为两类:1.静态网站2.动态网站 ...

  9. May 11th 2017 Week 19th Thursday

    If you fell down yesterday, stand up today. 昨天跌倒了,今天仍然要站起来. From Herbert George Wells. If you fell d ...

  10. note01-计算机网络

    1.基础概述 三网: 电信网络.有线电视网络.计算机网络(连通&共享) 终端->z本地ISP->x地区IXP->y主干ISP 通信方式: C/S .P2P(即是client也 ...