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 11 Javascript
JavaScript 事件入门知识
Apr 13 Javascript
js+html5绘制图片到canvas的方法
Jun 05 Javascript
JQuery插件Marquee.js实现无缝滚动效果
Apr 26 Javascript
IScroll5 中文API参数说明和调用方法
May 21 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
Nov 03 Javascript
js仿小米手机上下滑动效果
Feb 05 Javascript
详解javascript立即执行函数表达式IIFE
Feb 13 Javascript
vue源码入口文件分析(推荐)
Jan 30 Javascript
vuex 中插件的编写案例解析
Jun 10 Javascript
基于js实现判断浏览器类型代码实例
Jul 17 Javascript
利用H5api实现时钟的绘制(javascript)
Sep 13 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实现javascript的escape和unescape函数
2013/06/29 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
function foo的原型与prototype属性解惑
2010/11/19 Javascript
js常用代码段收集
2011/10/28 Javascript
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
wxPython学习之主框架实例
2014/09/28 Python
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python匹配中文的正则表达式
2016/05/11 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
python和JavaScript哪个容易上手
2020/06/23 Python
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
产品质量承诺书
2014/03/27 职场文书
物理教育专业求职信
2014/06/25 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
教师思想工作总结2015
2015/05/13 职场文书
中秋晚会致辞
2015/07/31 职场文书
学校少先队工作总结
2015/08/12 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
php访问对象中的成员的实例方法
2021/11/17 PHP
使用Python获取字典键对应值的方法
2022/04/26 Python
SQL SERVER中的流程控制语句
2022/05/25 SQL Server