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继承的实现代码
Aug 05 Javascript
13个绚丽的Jquery 界面设计网站推荐
Sep 28 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
Apr 26 Javascript
javascript中自定义对象的属性方法分享
Jul 12 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
Apr 13 Javascript
Bootstrap carousel轮转图的使用实例详解
May 17 Javascript
详解Javascript中prototype属性(推荐)
Sep 03 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
jQuery给表格添加分页效果
Mar 02 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
Sep 18 Javascript
vue实现lodop打印功能的示例
Nov 11 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文件上传(实例)
2013/10/27 PHP
使用swoole扩展php websocket示例
2014/02/13 PHP
JS冒泡事件的快速解决方法
2013/12/16 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
JavaScript实现的SHA-1加密算法完整实例
2016/02/02 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
vue如何截取字符串
2019/05/06 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
Python中逗号的三种作用实例分析
2015/06/08 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python实现Linux监控的方法
2019/05/16 Python
python之mock模块基本使用方法详解
2019/06/27 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
新浪网技术部笔试题
2016/08/26 面试题
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
学习雷锋精神活动总结
2015/02/06 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
python小程序之飘落的银杏
2021/04/17 Python