JavaScript实现网页对象拖放功能的方法


Posted in Javascript onApril 15, 2015

本文实例讲述了JavaScript实现网页对象拖放功能的方法。分享给大家供大家参考。具体如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Drag</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<style>
#myDiv{width:50px; height:50px; background-color:red}
</style>
</head>
<body>
<div id="myDiv"></div>
</body>
<script type="text/javascript">
 var isIE = document.all ? true : false;
 //判断是否是IE浏览器
 function addEventHandler(oTarget, sEventType, fnHandler){
 //添加事件
 if(oTarget.addEventListener){
 oTarget.addEventListener(sEventType, fnHandler, false);
 }else if(oTarget.attachEvent){
 oTarget.attachEvent("on" + sEventType, fnHandler);
 }else{
 oTarget["on" + 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 BindAsEventListener = function(object, fun) {
 //以另一个对象替换当前对象
 return function(event) {
 return fun.call(object, (event || window.event));
 }
 }
 var $ = function(id){
 return document.getElementById(id);
 }
 var Class = {
 create: function() {
 return function() {this.initialize.apply(this, arguments);}
 }
 }
 var drag = Class.create();
 drag.prototype = {
 initialize: function(id){//初始化
 this._drag = $(id);
 this._flag = false;
 addEventHandler(this._drag,'mousedown',BindAsEventListener(this,this.start));
 this._fM = BindAsEventListener(this, this.move);
 this._fS = BindAsEventListener(this, this.stop);
 this._drag.style.position = "absolute";
 },
 start: function(oEvent){//相当于onmousedown事件
 //return this._name;
 this._x = oEvent.clientX - this._drag.offsetLeft;
 this._y = oEvent.clientY - this._drag.offsetTop;
 addEventHandler(document, 'mousemove', this._fM);
 addEventHandler(document, 'mouseup', this._fS);
 if(isIE){
  addEventHandler(this._drag, "losecapture", this._fS);
 //焦点丢失
  this._Handle.setCapture();//设置鼠标捕获
 }else{
  addEventHandler(window, "blur", this._fS);//焦点丢失
  oEvent.preventDefault();//阻止默认动作
 }
 },
 move: function(oEvent){ //相当于onmonusemove事件
 this._drag.style.left = oEvent.clientX - this._x + "px";
 this._drag.style.top = oEvent.clientY - this._y + "px";
 },
 stop: function(){ //相当于onmouseup事件
 removeEventHandler(document, 'mousemove', this._fM);
 removeEventHandler(document, 'mouseup', this._fS);
 if(isIE){
  removeEventHandler(this._drag, "losecapture", this._fS);
  this._Handle.releaseCapture();
 }else{
  removeEventHandler(window, "blur", this._fS);
 }
 }
 }
 var ndrag = new drag("myDiv");
</script>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
自写简单JS判断是否已经弹出页面
Oct 20 Javascript
JavaScript网页定位详解
Jan 13 Javascript
js 动态为textbox添加下拉框数据源的方法
Apr 24 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
Aug 27 Javascript
jQuery中prevUntil()方法用法实例
Jan 08 Javascript
JavaScript实现下拉菜单的显示和隐藏
Jan 05 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
Dec 28 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
Apr 20 Javascript
详解vue中使用protobuf踩坑记
May 07 Javascript
Vuex,iView UI面包屑导航使用扩展详解
Nov 04 Javascript
微信小程序登录时如何获取input框中的内容
Dec 04 Javascript
Vue+abp微信扫码登录的实现代码示例
Jan 06 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
Apr 15 #Javascript
jQuery实现仿路边灯箱广告图片轮播效果
Apr 15 #Javascript
JavaScript中window.open用法实例详解
Apr 15 #Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
Apr 15 #Javascript
jQuery事件绑定与解除绑定实现方法
Apr 15 #Javascript
JavaScript表格常用操作方法汇总
Apr 15 #Javascript
jQuery控制Div拖拽效果完整实例分析
Apr 15 #Javascript
You might like
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
javascript中强制执行toString()具体实现
2013/04/27 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
python下载微信公众号相关文章
2019/02/26 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
大学自主招生自荐信
2013/12/16 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
分家协议书范本
2016/03/22 职场文书