JavaScript实现网页对象拖放功能的方法


Posted in Javascript onApril 15, 2015

本文实例讲述了JavaScript实现网页对象拖放功能的方法。分享给大家供大家参考。具体如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Drag</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<style>
#myDiv{width:50px; height:50px; background-color:red}
</style>
</head>
<body>
<div id="myDiv"></div>
</body>
<script type="text/javascript">
 var isIE = document.all ? true : false;
 //判断是否是IE浏览器
 function addEventHandler(oTarget, sEventType, fnHandler){
 //添加事件
 if(oTarget.addEventListener){
 oTarget.addEventListener(sEventType, fnHandler, false);
 }else if(oTarget.attachEvent){
 oTarget.attachEvent("on" + sEventType, fnHandler);
 }else{
 oTarget["on" + sEventType] = fnHandler;
 }
 }
 function removeEventHandler(oTarget, sEventType, fnHandler) {
 //移除事件
 if (oTarget.removeEventListener) {
 oTarget.removeEventListener(sEventType, fnHandler, false);
 } else if (oTarget.detachEvent) {
 oTarget.detachEvent("on" + sEventType, fnHandler);
 } else {
 oTarget["on" + sEventType] = null;
 }
 }
 var BindAsEventListener = function(object, fun) {
 //以另一个对象替换当前对象
 return function(event) {
 return fun.call(object, (event || window.event));
 }
 }
 var $ = function(id){
 return document.getElementById(id);
 }
 var Class = {
 create: function() {
 return function() {this.initialize.apply(this, arguments);}
 }
 }
 var drag = Class.create();
 drag.prototype = {
 initialize: function(id){//初始化
 this._drag = $(id);
 this._flag = false;
 addEventHandler(this._drag,'mousedown',BindAsEventListener(this,this.start));
 this._fM = BindAsEventListener(this, this.move);
 this._fS = BindAsEventListener(this, this.stop);
 this._drag.style.position = "absolute";
 },
 start: function(oEvent){//相当于onmousedown事件
 //return this._name;
 this._x = oEvent.clientX - this._drag.offsetLeft;
 this._y = oEvent.clientY - this._drag.offsetTop;
 addEventHandler(document, 'mousemove', this._fM);
 addEventHandler(document, 'mouseup', this._fS);
 if(isIE){
  addEventHandler(this._drag, "losecapture", this._fS);
 //焦点丢失
  this._Handle.setCapture();//设置鼠标捕获
 }else{
  addEventHandler(window, "blur", this._fS);//焦点丢失
  oEvent.preventDefault();//阻止默认动作
 }
 },
 move: function(oEvent){ //相当于onmonusemove事件
 this._drag.style.left = oEvent.clientX - this._x + "px";
 this._drag.style.top = oEvent.clientY - this._y + "px";
 },
 stop: function(){ //相当于onmouseup事件
 removeEventHandler(document, 'mousemove', this._fM);
 removeEventHandler(document, 'mouseup', this._fS);
 if(isIE){
  removeEventHandler(this._drag, "losecapture", this._fS);
  this._Handle.releaseCapture();
 }else{
  removeEventHandler(window, "blur", this._fS);
 }
 }
 }
 var ndrag = new drag("myDiv");
</script>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
不提示直接关闭网页窗口的JS示例代码
Dec 17 Javascript
JS日期加减,日期运算代码
Nov 05 Javascript
js表单验证实例讲解
Mar 31 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
浅谈jquery中使用canvas的问题
Oct 10 Javascript
JS创建对象的写法示例
Nov 04 Javascript
利用vue和element-ui设置表格内容分页的实例
Mar 02 Javascript
微信小程序实现折叠展开效果
Jul 19 Javascript
jquery实现搜索框功能实例详解
Jul 23 jQuery
vue中使用vee-validator完成表单校验方案
Nov 01 Javascript
vue.js路由mode配置之去掉url上默认的#方法
Nov 01 Javascript
基于elementUI竖向表格、和并列的案例
Oct 26 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
Apr 15 #Javascript
jQuery实现仿路边灯箱广告图片轮播效果
Apr 15 #Javascript
JavaScript中window.open用法实例详解
Apr 15 #Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
Apr 15 #Javascript
jQuery事件绑定与解除绑定实现方法
Apr 15 #Javascript
JavaScript表格常用操作方法汇总
Apr 15 #Javascript
jQuery控制Div拖拽效果完整实例分析
Apr 15 #Javascript
You might like
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
python计算日期之间的放假日期
2018/06/05 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
大学军训感言300字
2014/03/09 职场文书
个人求职信范文
2014/05/24 职场文书
工作岗位职责范本
2015/02/15 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
详解Python中下划线的5种含义
2021/07/15 Python
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
MySQL分区以及建索引的方法总结
2022/04/13 MySQL