js拖拽的原型声明和用法总结


Posted in Javascript onApril 04, 2016

下面是自己写的一个关于js的拖拽的原型声明:代码如下

需要注意的问题包括:

1.this的指向到底是指向谁--弄清楚所指的对象

2.call()方法的使用

3.直接将父级原型赋给子级与使用for将其赋给子级有什么区别?

比如:

for(var i in Drag.prototype)
{
  LimitDrag.prototype[i]=Drag.prototype[i];----------子级发生改变,其父级并不会受到影响
}

 LimitDrag.prototype=Drag.prototype;---------直接将原型赋给子级,会导致当子级发生改变时,其父级也会随之而改变。

代码如下

<html>
<head>
<style>
#div1 {width:100px; height:100px; background:red; position:absolute;}
#div2 {width:100px; height:100px; background:yellow; position:absolute;}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>拖拽--面向对象</title>
<script>
window.onload=function()
{
  new Drag('div1');
  new LimitDrag('div2');
}
function Drag(id)
{
   var _this=this;//这个this表示p1
   this.disx=0;
   this.disy=0;
   this.oDiv=document.getElementById(id);
   this.oDiv.onmousedown=function(ev){//按下的时候有个事件,传递给下面的事件
    _this.fnDown(ev);
    return false;
   }
}; 
Drag.prototype.fnDown=function(ev)
{
    var _this=this;
    var oEvent=ev||event;
    this.disx=oEvent.clientX-this.oDiv.offsetLeft;
    this.disy=oEvent.clientY-this.oDiv.offsetTop;
    document.onmousemove=function(ev){//移动的时候有个事件
       _this.fnMove(ev);
    }
    document.onmouseup=function(){
       _this.fnUp();
    }
}; 
 Drag.prototype.fnMove=function(ev)
{
      var oEvent=ev||event;
      this.oDiv.style.left=oEvent.clientX-this.disx+'px';
      this.oDiv.style.top=oEvent.clientY-this.disy+'px';
};
Drag.prototype.fnUp=function()
{
     document.onmousemove=null;
     document.onmouseup=null;
};
//继承Drag的所有属性
function LimitDrag(id)
{
    Drag.call(this,id);//这个this指LimitDrag new的对象
}
//得到Drag的方法,遍历其原型
for(var i in Drag.prototype)
{
  LimitDrag.prototype[i]=Drag.prototype[i];
}
//改变Drag的fnMove的方法
LimitDrag.prototype.fnMove=function(ev)
{
  var oEvent=ev||event;
  var l=oEvent.clientX-this.disx;
  var t=oEvent.clientY-this.disy;
  if(l>document.documentElement.clientWidth-this.oDiv.offsetWidth)
  {
    l=document.documentElement.clientWidth-this.oDiv.offsetWidth;
  }
  else if(l<0)
  {
    l=0;
  }
   if(t>document.documentElement.clientHeight-this.oDiv.offsetHeight)
  {
    t=document.documentElement.clientHeight-this.oDiv.offsetHeight;
  }
  else if(t<0)
  {
    t=0;
  }
   this.oDiv.style.left=l+'px';
   this.oDiv.style.top=t+'px';
}
</script>
</head>
<body>
<div id="div1">
</div>
<div id="div2">
</div>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
如何用javascript判断录入的日期是否合法
Jan 08 Javascript
var与Javascript变量隐式声明
Sep 17 Javascript
javascript数字格式化通用类 accounting.js使用
Aug 24 Javascript
js实现俄罗斯方块小游戏分享
Jan 31 Javascript
Jquery实现自定义tooltip示例代码
Feb 12 Javascript
javascript表格的渲染组件
Jul 03 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
Dec 16 Javascript
js获取一组日期中最近连续的天数
May 25 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
Sep 28 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
Aug 07 Javascript
JavaScript之解构赋值的理解
Jan 30 Javascript
vue 项目软键盘回车触发搜索事件
Sep 09 Javascript
javascript如何实现360度全景照片问题汇总
Apr 04 #Javascript
javascript制作照片墙及制作过程中出现的问题
Apr 04 #Javascript
javascript拖拽效果延伸学习
Apr 04 #Javascript
javascript事件委托的用法及其好处简析
Apr 04 #Javascript
基于javascript制作微博发布栏效果
Apr 04 #Javascript
纯js实现手风琴效果
Apr 17 #Javascript
AngularJS中的$watch(),$digest()和$apply()区分
Apr 04 #Javascript
You might like
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
新闻内页-JS分页
2006/06/07 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
js用类封装pop弹窗组件
2017/10/08 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
浅谈Django REST Framework限速
2017/12/12 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
Python之指数与E记法的区别详解
2019/11/21 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
python 追踪except信息方式
2020/04/25 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
经贸日语专业个人求职信范文
2013/12/28 职场文书
大学生文员专业个人求职信范文
2014/01/05 职场文书
建议书怎么写
2014/03/12 职场文书
初中班干部工作总结
2015/08/10 职场文书
Java字符串逆序方法详情
2022/03/21 Java/Android