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 相关文章推荐
java、javascript实现附件下载示例
Aug 14 Javascript
jQuery学习笔记之2个小技巧
Jan 19 Javascript
JavaScript计时器示例分析
Feb 05 Javascript
jquery事件绑定解绑机制源码解析
Sep 19 Javascript
arcgis for js 修改infowindow样式的方法
Nov 02 Javascript
使用jsonp实现跨域获取数据实例讲解
Dec 25 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
Jul 20 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
Aug 09 jQuery
webpack external模块的具体使用
Mar 10 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
Jan 18 Javascript
Vue.directive 实现元素scroll逻辑复用
Nov 29 Javascript
对vuex中store和$store的区别说明
Jul 24 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 动态随机生成验证码类代码
2010/04/09 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
Python编写检测数据库SA用户的方法
2014/07/11 Python
Python并行分布式框架Celery详解
2018/10/15 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
python tkinter窗口最大化的实现
2019/07/15 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
Linux如何压缩可执行文件
2014/03/27 面试题
介绍一下Python中webbrowser的用法
2013/05/07 面试题
省级四好少年事迹材料
2014/01/25 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
小学英语复习计划
2015/01/19 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
房屋质量投诉书
2015/07/02 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书