拖拽 支持ie6
可随意拖拽方块至任一位置:
1、setCapture方法:多用于容器对象,效果是对指定的对象设置鼠标捕获。使在容器内的子对象的鼠标事件均由容器对象触发,因此,只能在容器对象的鼠标事件函数中进行处理。
当参数为true时,对鼠标进行捕捉,相反,不捕捉。
与这个函数对应,releaseCapture方法释放鼠标捕获,并触发onlosecapture事件。
Javascript 事件捕获(setCapture,captureEvents) :模块拖放居然可以跨出浏览器。到底是什么方法让 mousemove 和 mouseup 事件可以到浏览器外也可以触发,(ie6\ie7不支持 mousemove 和 mouseup)
object.setCapture() 当一个object的被 setCapture 后,他的方法将会被继承到整个文档进行捕获。当不需要把方法继承到整个文档捕获时,要用 object.releaseCapture()
Mozilla 也有类似的功能,方法稍微不同
window.captureEvents(Event.eventType)
window.releaseEvents(Event.eventType)
//针对IE对指定的对象设置鼠标捕获,alert(this._obj.setCapture) =》function setCapture(){ [native code]}
2、element.addEventListener(type,listener,useCapture); 等同于attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)如: document.addEventListener('moueup', this._stopDrag, true);
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head> <style> #div1 {background:red; width:100px; height:100px; position:absolute; cursor:move;}
#div2 {background:yellow; width:100px; height:100px; position:absolute; cursor:move;}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
window.onload = function () {
var oDiv = document.getElementById("div1");
var oDiv1 = document.getElementById('div2');
var oDrag = new Drag(oDiv);
var oDrag1 = new Drag(oDiv1); oDrag.onDragStart = function () {
this.style.background = 'green';
}
oDrag.onDraging = function (x, y)
{
document.title = x + "," + y;
}
oDrag.onDragEnd = function () {
this.style.background = "red";
} }
function Drag(obj) {
var oBj = this;
this._obj = obj;
this._mouseStart = {};
this._divStart = {};
this._obj.onmousedown = function (ev) { //鼠标按下时执行...
oBj._starDrag(ev);
}
} Drag.prototype._starDrag = function (ev) {
var obj = this; //this为obj对象;
var oEvent = ev || event;//ev的值为鼠标按下对象;
this._mouseStart.x = oEvent.clientX; //鼠标按下位置的坐标值
this._mouseStart.y = oEvent.clientY;
this._divStart.x = this._obj.offsetLeft; //容器左上角的坐标
this._divStart.y = this._obj.offsetTop; //ie6\ie7
if (this._obj.setCapture) { //针对IE对指定的对象设置鼠标捕获,alert(this._obj.setCapture) =》function setCapture(){ [native code]}他的方法将会被继承到整个文档进行捕获
this._obj.onmousemove = function (ev) {
obj._doDrag(ev);
}
this._obj.onmouseup = function (ev) {
obj._stopDrag(ev);
}
this._obj.setCapture(); }
//其它浏览器
else {
this._doDrags = function (ev) {
obj._doDrag(ev);
}
this._stopDrags = function (ev) {
obj._stopDrag(ev);
}
document.addEventListener('mousemove', this._doDrags, true); //element.addEventListener(type,listener,useCapture); 等同于attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)
document.addEventListener('mouseup', this._stopDrags, true);
} if (this.onDragStart) { //如果对象有onDragStart方法,即调用以下函数;
this.onDragStart.call(this._obj);//函数调用方法,apply()和call(),我们可以使用它们来对this进行重置.
}
}
Drag.prototype._doDrag = function (ev) {
var oEvent = ev || event;
var l = oEvent.clientX - this._mouseStart.x + this._divStart.x;//移动的距离
var t = oEvent.clientY - this._mouseStart.y + this._divStart.y;
this._obj.style.left = l + "px";
this._obj.style.top = t + "px"; if (this.onDraging) {
this.onDraging.call(this._obj, l, t); //title 显示为当前坐标;
}
}
Drag.prototype._stopDrag = function (ev) {
if (this._obj.releaseCapture) {
alert(this._obj.releaseCapture)
this._obj.onmousemove = null;
this._obj.onmouseup = null;
this._obj.releaseCapture();
}
else {
document.removeEventListener("mousemove", this._doDrags, true);
document.removeEventListener("mouseup", this._stopDrags, true);
this._doDrags = this._stopDrags = null;
}
if (this.onDragEnd) {
this.onDragEnd.call(this._obj);
}
} </script>
</head>
<body>
<div id="div1"></div>
<div id="div2"></div> </body>
</html>
拖拽 支持ie6的更多相关文章
- WPF.UIShell UIFramework之自定义窗口的深度技术 - 模态闪动(Blink)、窗口四边拖拽支持(WmNCHitTest)、自定义最大化位置和大小(WmGetMinMaxInfo)
无论是在工作和学习中使用WPF时,我们通常都会接触到CustomControl,今天我们就CustomWindow之后的一些边角技术进行探讨和剖析. 窗口(对话框)模态闪动(Blink) 自定义窗口的 ...
- 让您的WinForm控件快速支持拖拽文件
实现原理:使用扩展方法. /// <summary> /// 控件扩展 /// </summary> public static class ControlExt { /// ...
- QTGraphics-View拖拽以及鼠标指针操作
因为QGraphicsView继承自QWidget,它也提供了像QWidget那样的拖拽功能. 另外,为了方便,Graphics View框架也为场景以及每个item提供拖拽支持.当视图接收到拖拽事件 ...
- vue在移动端使用alloyfinger手势库操作图片拖拽、缩放
最近开发一个活动需要在手机上给上传的头像加上边框.装饰,需要拖拽.手势缩放边框下的头像图片,因为是vue项目,开始尝试了vue-drag-resize这个组件,对图片拖拽支持很完美,但是无法手势缩放, ...
- 打造 html5 文件上传组件,实现进度显示及拖拽上传,支持秒传+分片上传+断点续传,兼容IE6+及其它标准浏览器
老早就注册了博客园帐号,昨天才发现,连博客都没开,Github也是一样,深觉惭愧,赶紧潜个水压压惊`(*∩_∩*)′ 言归正传.大概许多人都会用到文件上传的功能,上传的库貌似也不少,比如(jQuery ...
- 让Web页面中的编辑器支持黏贴或直接拖拽来添加图片
基本原理是将剪贴板中的图片二进制数据转为Base64编码 代码: <html> <head> </head> <body> <script src ...
- MWeb 1.4 新功能介绍一:引入文件夹到 MWeb 中管理,支持 Octpress、Jekyll 等静态博客拖拽插入图片和实时预览
之前在 MWeb 中打开非文档库中的 Markdown 文档,如果文档中有引用到本机图片,是没办法在 MWeb 中显示出来和预览的.这是因为 Apple 规定在 Mac App Store(MAS) ...
- jquery图片查看插件,支持旋转、放大、缩小、拖拽、缩略图(仿qq图片查看)
最近做了一个jquery图片查看的插件,目的是能精确查看图片的详情,插件支持图片旋转.放大.缩小.拖拽.缩略图显示,界面效果是按照window的qq查看图片功能写的,当然不尽相同. 具体功能: 1. ...
- WinForm支持拖拽效果
有一个MSDN客户提问在WinForm中如何实现拖拽效果——比如在WinForm中有一个Button,我要实现的效果是拖拽这个Button到目标位置后生成一个该控件的副本. 其实这个操作主要分成三步走 ...
随机推荐
- HTTP状态码具体解释
HTTP状态码(HTTP Status Code)是用以表示网页serverHTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518.RFC 2817.RFC 229 ...
- ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value:
今天碰到一个相当棘手的问题,那就是ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value . 本来在本地测试是没有任 ...
- 正则表达式匹配a标签或div标签
这里以a标签为例 a标签的href var a='<P><A href=\'~abc/ccg/ab.jpg\' width="3">文字</A> ...
- PhoneGap录像 以及 录音功能 简单代码实现3
1,录音功能 navigator.device.capture.captureAudio( function(files){//成功回调函数 Ext.getCmp("video_files_ ...
- Android编程心得-使用ActionBar+Fragment+ViewPager实现动态切换Menu效果
1.首先上效果图 2.本例实现的效果主要适用于当前页面有多个页签时.进行Fragment切换时,能够利用不同的Menu样式与当前Fragment中的内容进行配合,能够大大添加复用性,看到效果图后,以下 ...
- 优化SQL Server的内存占用之执行缓存
在论坛上常见有朋友抱怨,说SQL Server太吃内存了.这里笔者根据经验简单介绍一下内存相关的调优知识 首先说明一下SQL Server内存占用由哪几部分组成.SQL Server占用的内存主要 ...
- ModelAndView command
new ModelAndView("student", "command", new Student()); 对“如果在JSP中使用<form:form& ...
- 更轻便的markdown 编辑器Typora
更轻便的markdown 编辑器 Typora 所见即所得的键入方式 https://typora.io 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论.
- 【java】对数据库操作的那些事(包含数据库中的预处理)
一.连接问题 前面刚介绍了怎么连接数据库,也写了对应的模板.可是它的可维护性很差.那么怎么解决问题呢? 首先写一个配置文件jdbc.properties <span style="fo ...
- c++11 学习
#include <iostream> // std::cout #include <functional> // std::ref #include <thread&g ...