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 相关文章推荐
鼠标移动到一张图片时变为另一张图片
Dec 05 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
Jul 26 Javascript
读jQuery之四(优雅的迭代)
Jun 20 Javascript
Javascript中的delete介绍
Sep 02 Javascript
jquery实现pager控件示例
Apr 09 Javascript
PHP结合jQuery实现的评论顶、踩功能
Jul 22 Javascript
使用JQuery中的trim()方法去掉前后空格
Sep 16 Javascript
纯JS实现表单验证实例
Dec 24 Javascript
js正则表达式验证密码强度【推荐】
Mar 03 Javascript
JavaScript中this关键字用法实例分析
Aug 24 Javascript
vue项目中实现缓存的最佳方案详解
Jul 11 Javascript
基于JS实现快速读取TXT文件
Aug 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
php简单复制文件的方法
2016/05/09 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
js判断上传文件类型判断FileUpload文件类型代码
2014/05/20 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
Vue中使用Sortable的示例代码
2018/04/07 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
延安红色之旅心得体会
2014/10/07 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
信用卡工作证明范本
2015/06/19 职场文书