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 相关文章推荐
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
Sep 19 Javascript
javascript克隆对象深度介绍
Nov 20 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
Sep 04 Javascript
jQuery实现可编辑的表格实例讲解(2)
Sep 17 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
Sep 04 Javascript
jquery滚动条插件slimScroll使用方法
Feb 09 Javascript
AngularJs+Bootstrap实现漂亮的计算器
Aug 10 Javascript
微信小程序使用request网络请求操作实例
Dec 15 Javascript
深入浅析vue组件间事件传递
Dec 29 Javascript
基于Vue的ajax公共方法(详解)
Jan 20 Javascript
jQuery控制input只能输入数字和两位小数的方法
May 16 jQuery
Vue跨域请求问题解决方案过程解析
Aug 07 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
解析wamp5下虚拟机配置文档
2013/06/27 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
PHP实现事件机制的方法
2015/07/10 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
python利用hook技术破解https的实例代码
2013/03/25 Python
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
python逐行读取文件内容的三种方法
2014/01/20 Python
python实现根据图标提取分类应用程序实例
2014/09/28 Python
Python 异常处理的实例详解
2017/09/11 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
python super的使用方法及实例详解
2019/09/25 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
一些高难度的SQL面试题
2016/11/29 面试题
机械电子工程专业推荐信范文
2013/11/20 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
北体毕业生求职信
2014/02/28 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
小学教师师德承诺书
2014/05/23 职场文书
计算机科学技术自荐信
2014/06/12 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python