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 相关文章推荐
页面只能打开一次Cooike如何实现
Dec 04 Javascript
JS动态添加option和删除option(附实例代码)
Apr 01 Javascript
Bootstrap进度条组件知识详解
May 01 Javascript
JS实现页面载入时随机显示图片效果
Sep 07 Javascript
浅谈javascript:两种注释,声明变量,定义函数
Sep 29 Javascript
angular源码学习第一篇 setupModuleLoader方法
Oct 20 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
JS组件系列之JS组件封装过程详解
Apr 28 Javascript
vue router demo详解
Oct 13 Javascript
使用JS中的Replace()方法遇到的问题小结
Oct 20 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
Feb 21 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通过文件保存和更新信息的方法分析
2019/09/12 PHP
PHP强制转化的形式整理
2020/05/22 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
node.js操作mysql简单实例
2017/05/25 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
vue中如何使用ztree
2018/02/06 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
python 切片和range()用法说明
2013/03/24 Python
wxPython中文教程入门实例
2014/06/09 Python
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
Python的Django框架中if标签的相关使用
2015/07/15 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
pandas分批读取大数据集教程
2020/06/06 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
售后求职信范文
2014/03/15 职场文书
补充协议书
2015/01/28 职场文书
夏洛特的网观后感
2015/06/15 职场文书
董事会决议范本
2015/07/01 职场文书
MySQL的Query Cache图文详解
2021/07/01 MySQL