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 相关文章推荐
javascript div 遮罩层封锁整个页面
Jul 10 Javascript
jquery 实现两级导航菜单附效果图
Mar 07 Javascript
jQuery构造函数init参数分析
May 13 Javascript
Jquery 垂直多级手风琴菜单附源码下载
Nov 17 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
Nov 30 Javascript
javascript从作用域链谈闭包
Jul 29 Javascript
常用原生JS兼容性写法汇总
Apr 27 Javascript
js实现可控制左右方向的无缝滚动效果
May 29 Javascript
JQuery 动态生成Table表格实例代码
Dec 02 Javascript
解决jquery有正确返回值但不执行success函数的问题
Aug 20 jQuery
小程序如何定位所在城市及发起周边搜索
Feb 11 Javascript
JavaScript 实现轮播图特效的示例
Nov 05 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中cookie的作用域
2008/03/27 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
使用PYTHON创建XML文档
2012/03/01 Python
python中执行shell的两种方法总结
2017/01/10 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
Python 函数返回值的示例代码
2019/03/11 Python
python pandas时序处理相关功能详解
2019/07/03 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
交通事故协议书
2014/04/15 职场文书
迎国庆演讲稿
2014/09/05 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript