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 相关文章推荐
JS中剪贴板兼容性、判断复制成功或失败
Mar 09 Javascript
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
Jun 04 Javascript
js修改table中Td的值(定义td的双击事件)
Jan 10 Javascript
JavaScript中reduce()方法的使用详解
Jun 09 Javascript
Jquery结合HTML5实现文件上传
Jun 25 Javascript
Jquery日历插件制作简单日历
Oct 28 Javascript
AngularJS入门心得之directive和controller通信过程
Jan 25 Javascript
JSON键值对序列化和反序列化解析
Jan 24 Javascript
vue2 前端搜索实现示例
Feb 26 Javascript
详解jQuery设置内容和属性
Apr 11 jQuery
node.js中stream流中可读流和可写流的实现与使用方法实例分析
Feb 13 Javascript
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
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 stream_context_create()作用和用法分析
2011/03/29 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
PHP 文件系统详解
2012/09/13 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
学习ExtJS 访问容器对象
2009/10/07 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
2015/10/08 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
Nginx 配置多站点vhost 的方法
2018/01/07 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
vue 插件的方法代码详解
2019/06/06 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
Python算法之栈(stack)的实现
2014/08/18 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
python使用生成器实现可迭代对象
2018/03/20 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
深入了解Python 方法之类方法 & 静态方法
2020/08/17 Python
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
班长岗位职责
2013/11/10 职场文书
综合办公室主任职责
2013/12/16 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
物理专业大学生职业生涯规划书
2014/02/07 职场文书
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js