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动画(animate)简单引擎代码示例
Dec 04 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
Apr 23 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
Feb 28 Javascript
js代码实现无缝滚动(文字和图片)
Aug 20 Javascript
JS随机洗牌算法之数组随机排序
Mar 23 Javascript
jQuery动态加载css文件实现方法
Jun 15 Javascript
JS获取一个未知DIV高度的方法
Aug 09 Javascript
AngularJS中控制器函数的定义与使用方法示例
Oct 10 Javascript
vue+webpack模拟后台数据的示例代码
Jul 26 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
Dec 03 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
Apr 11 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
May 18 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
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
JS实现简易日历效果
2021/01/25 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Python Requests 基础入门
2016/04/07 Python
Python用threading实现多线程详解
2017/02/03 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
结束运行python的方法
2020/06/16 Python
python实现学生成绩测评系统
2020/06/22 Python
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
生产厂长岗位职责
2014/02/21 职场文书
刊首寄语大全
2014/04/11 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
优秀护士事迹材料
2014/12/25 职场文书
中秋节寄语2015
2015/03/24 职场文书
生日宴会家属答谢词
2015/09/29 职场文书