javascript 可以拖动的DIV(二)


Posted in Javascript onJune 26, 2009

function beginDrag(elementToDrag,event)
{
var =event.clientX-parseInt(elementToDrag.style.left);
var deltaY=event.clientY-parseInt(elementToDrag.style.top);
//这儿的deltaX/Y实际上就是得出鼠标和div的坐标差。
if(document.addEventListener)
//之所以在这儿加这样一个判断,是因为IE6和firefox对于javascript的事件处理有不同的方法(IE7之后的版本开始符合W3C的标准)。
//document.addEventlistener如果是true的话,那就是firefox等支持W3C DOM标准的浏览器,IE6中注册事件用attachEvent,而firefox等浏览器则是用addEventListener,语法如下所示。addEventListener函数的true参数表示可以捕捉事件。
{
document.addEventListener("mousemove",moveHandler,true);
document.addEventListener("mouseup",upHandler,true);
//document.addEventListener("mouseout",upHandler,true);
}
else if(document.attachEvent)
{
document.attachEvent("onmousemove",moveHandler);
document.attachEvent("onmouseup",upHandler);
//document.attachEvent("onmouseout",upHandler);
}
if(event.stopPropagation) event.stopPropagation();
else event.cancelBubble=true;
//这儿的判断依然是考虑了不同的浏览器,stopPropagation是W3C DOM标准中使用的一个方法,用来取消事件的传播。我们使用了document.addEventListener这个方法,浏览器会从document对象沿着DOM节点向下传播到目标节点,注册的事件处理程序就会运行,然后事件会回传到父节点,如果父节点也有相应的事件处理程序,那么事件也会处理,为了避免这种情况,我们可以用stopPropagation来阻止事件的传播,这个方法的作用就是让其他元素对这个事件不可见。在IE6下,并没有元素捕捉事件的过程,不过有这个术语叫做起泡的过程,IE6中所用的方法就是cancelBubble,用来取消起泡,表示这个事件已被处理,其他元素不用再看见了。
if(event.preventDefault) event.preventDefault();
else event.returnValue=false;
//这儿的preventDefault用来通知浏览器不要执行与事件关联的默认动作,returnValue用来取消发生事件的源元素的默认动作,大家应该能看出这是在不同浏览器下发挥相同的作用。
//以下就是拖动div中所用的关键函数了。
function moveHandler(e)
{

if (!e) e=window.event; //如果是IE的事件对象,那么就用window.event

//全局属性,否则就用DOM二级标准的Event对象。
//在IE中,event是window的一个属性,也就是一个全局变量,但是在W3C DOM中,event是发生事件的文档对象的属性。在这个程序中,event是什么并不重要,关键是我们要取得鼠标的坐标值,在IE中,e这个参数传进来的时候,IE认不出来,所以我们就给e赋值为window.event。
elementToDrag.style.left=(e.clientX-deltaX)+"px";
elementToDrag.style.top=(e.clientY-deltaY)+"px";
//这儿就是改变现在正在作用的div的left和top属性。
if(e.stopPropagation) e.stopPropagation();
else e.cancelBubble=true;
}
function upHandler(e)
{
if(document.removeEventListener)
{
document.removeEventListener("mouseup",upHandler,true);
document.removeEventListener("mousemove",moveHandler,true);
}
else
{
document.detachEvent("onmouseup",upHandler);
document.detachEvent("onmousemove",moveHandler);
}
//这个函数是用来移除侦听器,比较简单,就不详细说了。
if (!e) e=window.event;
if(e.stopPropagation) e.stopPropagation();
else e.cancelBubble=true;
}
}
三水点靠木 编辑注:如果不能正常运行 注意字符的替换,因为好多网站为了安装都将字符转换成了中文下的标点符号。本站也尽量的替换。

Javascript 相关文章推荐
jQuery数组处理方法汇总
Jun 20 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
jquery无缝向上滚动实现代码
Mar 29 Javascript
angular.element方法汇总
Jan 07 Javascript
JQuery中使文本框获得焦点的方法实例分析
Feb 28 Javascript
Javascript中With语句用法实例
May 14 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
May 30 Javascript
详解AngularJS2 Http服务
Jun 26 Javascript
深入理解React中何时使用箭头函数
Aug 23 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
Mar 15 Javascript
30分钟快速实现小程序语音识别功能
Nov 27 Javascript
TypeScript高级用法的知识点汇总
Dec 17 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
Jun 26 #Javascript
JQuery 国际象棋棋盘 实现代码
Jun 26 #Javascript
javascript 读取图片文件的大小
Jun 25 #Javascript
JQuery 入门实例1
Jun 25 #Javascript
JavaScript 开发中规范性的一点感想
Jun 23 #Javascript
jQuery 表单验证插件formValidation实现个性化错误提示
Jun 23 #Javascript
一个很酷的拖动层的js类,兼容IE及Firefox
Jun 23 #Javascript
You might like
php 中文处理函数集合
2008/08/27 PHP
PHP 柱状图实现代码
2009/12/04 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
5个javascript的数字格式化函数分享
2011/12/07 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
python文件写入实例分析
2015/04/08 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
方法名是否可以与构造器的名字相同
2012/06/04 面试题
什么是聚集索引和非聚集索引
2012/01/17 面试题
革命先烈的英雄事迹材料
2014/02/15 职场文书
公司员工活动策划方案
2014/08/20 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
详解MongoDB排序时内存大小限制与创建索引的注意事项
2022/05/06 MongoDB