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 相关文章推荐
动态调用CSS文件的JS代码
Jul 29 Javascript
jquery的ajax请求全面了解
Mar 20 Javascript
简约JS日历控件 实例代码
Jul 12 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
Dec 31 Javascript
JS+JSP checkBox 全选具体实现
Jan 02 Javascript
jQuery自带的一些常用方法总结
Sep 03 Javascript
js数组去重的5种算法实现
Nov 04 Javascript
一道JS前端闭包面试题解析
Dec 25 Javascript
Webpack之tree-starking 解析
Sep 11 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
Jan 20 Javascript
浅谈vue限制文本框输入数字的正确姿势
Sep 02 Javascript
js get和post请求实现代码解析
Feb 06 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中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
PDO::rollBack讲解
2019/01/29 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
js实现下一页页码效果
2017/03/07 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
详细解读tornado协程(coroutine)原理
2018/01/15 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
联想C++笔试题
2012/06/13 面试题
初中生自我评价
2014/02/01 职场文书
公司经理任命书
2014/06/05 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电
MySQL分布式恢复进阶
2022/07/23 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL