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 相关文章推荐
javascript:void(0)的真正含义实例分析
Aug 20 Javascript
jquery下实现overlay遮罩层代码
Aug 25 Javascript
一个获取第n个元素节点的js函数
Sep 02 Javascript
详解JavaScript权威指南之对象
Sep 27 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
Dec 22 Javascript
JavaScript 动态三角函数实例详解
Jan 08 Javascript
浅谈React前后端同构防止重复渲染
Jan 05 Javascript
AngularJS上传文件的示例代码
Nov 10 Javascript
深入探讨JavaScript的最基本部分之执行上下文
Feb 12 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
Sep 28 Javascript
写给新手同学的vuex快速上手指北小结
Apr 14 Javascript
浅谈JavaScript中的“!!”作用
Aug 03 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的session cookie错误
2009/08/09 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
js window.event对象详尽解析
2009/02/17 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
微信小程序实现拖拽功能
2019/09/26 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
Python如何使用input函数获取输入
2020/08/06 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
总经理岗位职责
2013/11/09 职场文书
网络工程师职业规划
2014/02/10 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers