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 this用法小结
Dec 19 Javascript
使用jQuery简化Ajax开发 Ajax开发入门
Oct 14 Javascript
js对象关系图 方便dom操作
Mar 18 Javascript
实现局部遮罩与关闭原理及代码
Feb 04 Javascript
30个经典的jQuery代码开发技巧
Dec 15 Javascript
jQuery遍历json中多个map的方法
Feb 12 Javascript
javascript实现简单的鼠标拖动效果实例
Apr 10 Javascript
AngularJS  $modal弹出框实例代码
Aug 24 Javascript
jQuery实现简单的网页换肤效果示例
Sep 18 Javascript
tween.js缓动补间动画算法示例
Feb 13 Javascript
解决Angular2 router.navigate刷新页面的问题
Aug 31 Javascript
vue+webpack 更换主题N种方案优劣分析
Oct 28 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
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
Node.js 使用jade模板引擎的示例
2018/05/11 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
js实现弹窗效果
2020/08/09 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
python操作excel让工作自动化
2019/08/09 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
咖啡厅创业计划书范本
2014/01/22 职场文书
网络营销策划方案
2014/06/04 职场文书
在Django中使用MQTT的方法
2021/05/10 Python