JS实现的简易拖放效果示例


Posted in Javascript onDecember 29, 2016

本文实例讲述了JS实现的简易拖放效果。分享给大家供大家参考,具体如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>简易拖放效果</title>
</head>
<body>
<script type="text/JavaScript">
<!--
var isIE = (document.all) ? true : false;// 是否ie
var $ = function (id) {
  //返回id对象
  return "string" == typeof id ? document.getElementById(id) : id;
};
var Class = {
  // 带构造方法的类
  create: function() {
    return function() { this.initialize.apply(this, arguments); } //用apply应用下面的initialize初始化属性
  }
}
var Extend = function(destination, source) {
  //继承
  for (var property in source) {
    destination[property] = source[property];
  }
}
var Bind = function(object, fun) {
  return function() {
    return fun.apply(object, arguments);
  }
}
/**
用object对象调用fun参数是event||window event
**/
var BindAsEventListener = function(object, fun) {
  return function(event) {
    return fun.call(object, (event || window.event));
  }
}
/**
添加帧听器事件
@oTarget 目标对象
@sEventType 事件类型
@fnHandler 目标触发事件对象
**/
function addEventHandler(oTarget, sEventType, fnHandler) {
  if (oTarget.addEventListener) {
    oTarget.addEventListener(sEventType, fnHandler, false);//firefox
  } else if (oTarget.attachEvent) {
    oTarget.attachEvent("on" + sEventType, fnHandler);//ie
  } else {
    oTarget["on" + sEventType] = fnHandler;//other
  }
};
/**
清除添加的帧听器事件
@oTarget 目标对象
@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 SimpleDrag = Class.create();
SimpleDrag.prototype = {
 //拖放对象,触发对象,初始化
 initialize: function(drag) {
  this.Drag = $(drag);
  this._x = this._y = 0;
  this._fM = BindAsEventListener(this, this.Move);//_fM方法就是应用MOVE方法参数是event||window.event
  this._fS = Bind(this, this.Stop);//_fS类方法就是Stop方法
  this.Drag.style.position = "absolute";
  this.Drag.style.cursor = "move";
  addEventHandler(this.Drag, "mousedown", BindAsEventListener(this, this.Start));
 },
 //准备拖动
 Start: function(oEvent) {
  this._x = oEvent.clientX - this.Drag.offsetLeft;
  this._y = oEvent.clientY - this.Drag.offsetTop;
  addEventHandler(document, "mousemove", this._fM);
  addEventHandler(document, "mouseup", this._fS);
 },
 //拖动
 Move: function(oEvent) {
  this.Drag.style.left = oEvent.clientX - this._x + "px";
  this.Drag.style.top = oEvent.clientY - this._y + "px";
 },
 //停止拖动
 Stop: function() {
  removeEventHandler(document, "mousemove", this._fM);
  removeEventHandler(document, "mouseup", this._fS);
 }
};
// -->
</script>
<div id="idDrag" style="border:5px solid #0000FF; background:#C4E3FD; width:50px; height:50px;"></div>
<script type="text/javascript">
<!--
new SimpleDrag("idDrag");
// -->
</script>
</body>
</html>

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

Javascript 相关文章推荐
符合标准的js表单提交的代码
Sep 13 Javascript
Extjs学习笔记之二 初识Extjs之Form
Jan 07 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
May 18 Javascript
Jquery中删除元素的实现代码
Dec 29 Javascript
javascript 使用 NodeList需要注意的问题
Mar 04 Javascript
JS调用CS里的带参方法实例
Aug 01 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
Apr 23 Javascript
jQuery实现简单滚动动画效果
Apr 07 Javascript
js利用正则表达式检验输入内容是否为网址
Jul 05 Javascript
JS实现的简单折叠展开动画效果示例
Apr 28 Javascript
vue根据值给予不同class的实例
Sep 29 Javascript
微信小程序学习笔记之本地数据缓存功能详解
Mar 29 Javascript
使用DeviceOne实现微信小程序功能
Dec 29 #Javascript
Angularjs 动态改变title标题(兼容ios)
Dec 29 #Javascript
浅谈js算法和流程控制
Dec 29 #Javascript
canvas学习之API整理笔记(二)
Dec 29 #Javascript
Node.js复制文件的方法示例
Dec 29 #Javascript
详解微信小程序——自定义圆形进度条
Dec 29 #Javascript
JS作用域深度解析
Dec 29 #Javascript
You might like
php sybase_fetch_array使用方法
2014/04/15 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
python插入排序算法实例分析
2015/07/03 Python
Python编程实现蚁群算法详解
2017/11/13 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
Django中modelform组件实例用法总结
2020/02/10 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
大学生求职自荐信
2013/12/12 职场文书
共产党员公开承诺书
2014/03/25 职场文书
大学活动总结格式
2014/04/29 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
Consul在linux环境的集群部署
2022/04/08 Servers