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 相关文章推荐
改进UCHOME的记录发布,增强可访问性用户体验
Jan 17 Javascript
js 页面关闭前的出现提示的实现代码
May 25 Javascript
js 遍历对象的属性的代码
Dec 29 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
Sep 05 Javascript
js仿百度贴吧验证码特效实例代码
Jan 16 Javascript
JQuery 图片滚动轮播示例代码
Mar 24 Javascript
Vue.js快速入门实例教程
Oct 15 Javascript
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
React应用中使用Bootstrap的方法
Aug 15 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
Dec 25 jQuery
详解node登录接口之密码错误限制次数(含代码)
Oct 25 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
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
php 变量定义方法
2009/06/14 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
python实现telnet客户端的方法
2015/04/15 Python
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
numpy中索引和切片详解
2017/12/15 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
Python 文件数据读写的具体实现
2020/01/24 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
成品仓管员工作职责
2013/12/29 职场文书
孝老爱亲模范事迹
2014/01/24 职场文书
司机职责范本
2014/03/08 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript
vue实现简易音乐播放器
2022/08/14 Vue.js