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跨域和ajax 跨域问题的实现思路
Sep 05 Javascript
JavaScript 注册事件代码
Jan 27 Javascript
快速排序 php与javascript的不同之处
Feb 22 Javascript
兼容主流浏览器的iframe自适应高度js脚本
Jan 10 Javascript
js输出阴历、阳历、年份、月份、周示例代码
Jan 29 Javascript
原生JS实现响应式瀑布流布局
Apr 02 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
Jan 21 Javascript
jQuery的ajax和遍历数组json实例代码
Aug 01 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
Dec 25 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
Apr 27 Javascript
浅谈ElementUI中switch回调函数change的参数问题
Aug 24 Javascript
Vue 监听列表item渲染事件方法
Sep 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验证手机号码(支持归属地查询及编码为UTF8)
2013/02/01 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
JS前端加密算法示例
2016/12/22 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
python使用socket连接远程服务器的方法
2015/04/29 Python
对于Python装饰器使用的一些建议
2015/06/03 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
财务管理专业推荐信
2013/11/19 职场文书
出纳员岗位职责
2014/03/13 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL