javascript如何实现随意拖动的层

javascript如何实现随意拖动的层:

在很多应用中都有拖动层移动的效果的扩展,下面就通过实例简单介绍一下如何利用javascript实现随意拖动一个层的效果。

代码实例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.51texiao.cn/" />
<title>蚂蚁部落</title>
<style type="text/css">
#divBlock
{
 width:140px;
 height:140px;
 background-color:pink;
 cursor:pointer;
}
</style>
<script type="text/javascript">
function divBlock_event_mousedown(e)
{
 var e, obj;
 obj=document.getElementById("divBlock");
 e=window.event?window.event:e;
 obj.startX=e.clientX-obj.offsetLeft;
 obj.startY=e.clientY-obj.offsetTop;
 document.onmousemove=document_event_mousemove; 

 if(document.attachEvent)
 {
    document.attachEvent("onmouseup",document_event_mouseup)
 }
 else
 {
    document.addEventListener("mouseup",document_event_mouseup,"")
 }
}
function document_event_mousemove(e)
{
  var e, obj;
  obj=document.getElementById("divBlock");
  e=window.event?window.event:e;
  with(obj.style)
  {
    position="absolute";
    left=e.clientX-obj.startX+"px";
    top=e.clientY-obj.startY+"px";
  }
}
function document_event_mouseup(e)
{
  document.onmousemove=""; 

  if(document.attachEvent)
  {
    document.detachEvent("onmouseup",document_event_mouseup);
  }
  else
  {
     document.removeEventListener("mouseup",document_event_mouseup,"");
  }
}
</script>
</head>
<body>
  <div id="divBlock" onmousedown="divBlock_event_mousedown(arguments[0])"></div>
</body>
</html>

在以上代码中,当鼠标在div中按下时,可以随意拖动div的位置。下面就简单介绍一下实现过程。

实现原理:

当鼠标在div块中按下的时候,就会触发div的onmousedown事件,并且通过计算出鼠标按下时鼠标指针所在位置到div左边缘和上边缘的距离。当鼠标移动的时候就通过鼠标当前在屏幕中的坐标减去前面计算所得鼠标指针距离左边缘和上边缘的距离,就可以实时的获得当前div绝对定位的left和top属性值,这样就实现了鼠标拖动div块移动的效果。当鼠标松开的时候就会触发onmouseup事件,然后调用document_event_mouseup()函数,进而删除相应的事件处理程序。

代码注释:

1.function divBlock_event_mousedown(e){},onmousedown事件处理程序。

1.1.var e, obj,声明两个变量,用法会在下面介绍。

1.2.obj=document.getElementById("divBlock"),获得div对象。

1.3.e=window.event?window.event:e,用来兼容IE9以下浏览器和火狐浏览器,可以参阅javascript事件对象参数兼容各浏览器写。

1.4.obj.startX=e.clientX-obj.offsetLeft,用来计算鼠标当前位置距离div左边缘的尺寸。

1.5.obj.startY=e.clientY-obj.offsetTop,用来计算鼠标当前位置距离div上边缘的尺寸。

1.6.document.onmousemove=document_event_mousemove,为document对象绑定onmousemove事件处理函数,之所以将事件处理函数绑定在document对象而不是要拖动的div之上是为了防止当鼠标指针移出div之后导致拖动效果失效的问题。

1.7.if(document.attachEvent)用以兼容IE8和IE8以下浏览器与其他主流浏览器,具体参阅javascript如何注册事件处理函数。

2. function document_event_mousemove(e){}定义onmousemove事件处理函数。

2.1.var e, obj,声明两个变量,下面会有用到。

2.2.obj=document.getElementById("divBlock"),获得div对象。

2.3.e=window.event?window.event:e,用来兼容IE9以下浏览器和火狐浏览器,可以参阅javascript事件对象参数兼容各浏览器写。

2.4.with(obj.style),具体可以参阅javascript中with语句的使用。

2.5.position="absolute",将div设置为绝对定位。

2.6.left=e.clientX-obj.startX+"px",设置鼠标拖动时,div的left属性值。

2.7.top=e.clientY-obj.startY+"px",设置鼠标拖动时,div的top属性值。

2.8.function document_event_mouseup(e){},用以删除注册的事件处理函数。

3.onmousedown="divBlock_event_mousedown(arguments[0])",用以兼容火狐浏览器,火狐事件对象参数必须以参数形式传递。

原文地址是:http://www.51texiao.cn/javascriptjiaocheng/2015/0430/488.html

最原始地址是:http://www.softwhy.com/

时间: 2024-11-07 05:44:42

javascript如何实现随意拖动的层的相关文章

javascript弹出可以拖动的窗口代码实例

javascript弹出可以拖动的窗口代码实例: 在很多网页效果中,点击网页的某个地方能够弹出一个窗口,并且能够在屏幕中随便拖动,非常的人性化,下面就是一段能够实现此功能的代码实例,希望能够对大家带来帮助,代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.

JS随意拖动图片

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>JS随意拖动图片丨河北冷风机</title> </head> <body onLoad="remove()"> <div id="div1" onMouseOv

鼠标拖动改变层的大小

<html><head><title>拖动改变层的大小</title><meta content="text/html; charset=gb2312" http-equiv="Content-Type"><style> {box-sizing: border-box; moz-box-sizing: border-box}#testDiv { background-color: buttonf

CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

1.先添加几个RPM下载源 1.1)安装RPMforge的CentOS6源      [[email protected] ~]# wget -c http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm      [[email protected] ~]# rpm –import http://apt.sw.be/RPM-GPG-KEY.dag.txt      [[email 

Android 自定义的数字键盘 支持随意拖动 和稳定的字符输入的控件

经过 研究 实现了自定义 键盘 ,支持随意拖动 和数字及其他字符输入 下面是主要的代码 和使用方法 import android.content.Context; import android.util.Log; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.Gravity; import android.view.Mo

JAVASCRIPT+DHTML实现表格拖动

自已做的,本来想在网上找前辈们做的,可是总找不到这种例子,要么找出来的太复杂, 要么就没法用,索性自己写了一个.看看还可以用!贡献出来,估计和我一样的菜鸟用的着! <html> <style> body{ font-size:9pt; } table,th,td{ font-size:9pt; } .lsitTalbe{ table-layout:fixed; width:30%; border-collapse:collapse; border-color:#507010; co

点击页面的悬浮窗口实现随意拖动

最近做了个在线聊天窗口  要求是要可以所以拖动.以下是html 和js相关代码: 1.html <div id="circle" ng-mousedown="move($event)" class="scrollTop" ng-if="onlineService"> <div class="lineHeightTop" ng-click="openNewWindow()"

[uwp]自定义Behavior之随意拖动

由于最近有需求,所以自定义了一个随意拖动元素的Behavior. 当然在使用这个自定义的Behavior时,有个小假设:拖动元素必须是Canvas容器的子元素. 实现原理比较简单低效: 监听被拖动元素的PointerMoved事件,当事件触发的时候,获取当前的指针信息,判断是否处于鼠标左键按下状态(Properties.IsLeftButtonPressed,在触摸屏上,手指移动时,该属性也为真),如果为真,就执行改变元素位置的代码,否则不做处理. 原理大致如上. 鉴于比较简单,直接上代码 pu

分享一个自定义打印套打方案(二),扩展Panel,以支持鼠标随意拖动

接上一章节,本篇主要介绍一种支持鼠标随意拖动Panel内部控件位置的方法.为了简单起见,这里我们不妨就暂称我们将要扩展的Panel容器名称为 MoveControlPanel,该容器至少需要实现以下功能 1. 识别当前鼠标位置,是否处于某个内部组件的边框位置,以让鼠标显示出对应的图标(拉伸,移动-) 2.移动鼠标以改变内部某个组件的大小及坐标, 3.保存容器内每个组件的当前坐标及大小. 为了便于描述当前光标状态,我们不妨定义一个枚举.姑且称其为 EMousePointPosition, 其至少应