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 函数调用规则
Aug 26 Javascript
document.all的一个比较完整的总结及案例
Jan 31 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
Mar 04 Javascript
jQuery中:disabled选择器用法实例
Jan 04 Javascript
js倒计时抢购实例
Dec 20 Javascript
深入理解ECMAScript的几个关键语句
Jun 01 Javascript
巧用jQuery选择器提高写表单效率的方法
Aug 19 Javascript
node.js中的事件处理机制详解
Nov 26 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
Feb 24 Javascript
用jQuery实现圆点图片轮播效果
Mar 19 Javascript
使用FormData实现上传多个文件
Dec 04 Javascript
使用JavaScript保存文本文件到本地的两种方法
Jan 22 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实现加密的几种方式介绍
2015/02/22 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
Zend Framework框架Smarty扩展实现方法
2016/03/22 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
php实现用户登陆简单实例
2017/04/04 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
vue 中swiper的使用教程
2018/05/22 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
python aiohttp的使用详解
2019/06/20 Python
python实现最小二乘法线性拟合
2019/07/19 Python
python树的同构学习笔记
2019/09/14 Python
python中的错误如何查看
2020/07/08 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
小学班主任寄语大全
2014/04/04 职场文书
给老婆的保证书范文
2014/04/28 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
五年级学生期末评语
2014/12/26 职场文书
长江三峡导游词
2015/01/31 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
详解TypeScript中的类型保护
2021/04/29 Javascript
解决golang在import自己的包报错的问题
2021/04/29 Golang
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL