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 省地市级联选择
Feb 07 Javascript
基于jquery的大众点评,分类导航实现代码
Aug 23 Javascript
解析javascript 数组以及json元素的添加删除
Jun 26 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
Sep 01 Javascript
jQuery Validate表单验证入门学习
Dec 18 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
Feb 25 Javascript
使用jQuery实现Web页面换肤功能的要点解析
May 12 Javascript
AngularJS表达式讲解及示例代码
Aug 16 Javascript
JavaScript 随机验证码的生成实例代码
Sep 22 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
Sep 16 Javascript
微信小程序监听用户登录事件的实现方法
Nov 11 Javascript
vue-iview动态新增和删除的方法
Jun 17 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
自己动手做一个SQL解释器
2006/10/09 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
hadoop常见错误以及处理方法详解
2013/06/19 PHP
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
JS实现滑动插件
2020/01/15 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
python实现IOU计算案例
2020/04/12 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
银行职业规划书范文
2013/12/28 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
擅自离岗检讨书
2014/02/11 职场文书
业务内勤岗位职责
2014/04/30 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
三严三实学习心得体会
2014/10/13 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
同学聚会通知短信
2015/04/20 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
高三物理教学反思
2016/02/20 职场文书
Golang 并发编程 SingleFlight模式
2022/04/26 Golang