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 相关文章推荐
jquery连缀语法如何实现
Nov 29 Javascript
js检查页面上有无重复id的实现代码
Jul 17 Javascript
浅析javascript中的事件代理
Nov 06 Javascript
JavaScript中判断数据类型的方法总结
May 24 Javascript
jquery选择器中的空格与大于号&gt;、加号+与波浪号~的区别介绍
Jun 24 Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 Javascript
p5.js入门教程之平滑过渡(Easing)
Mar 16 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
Nov 25 Javascript
原生js实现移动端Touch轮播图的方法步骤
Jan 03 Javascript
JS匿名函数内部this指向问题详析
May 10 Javascript
用js简单提供增删改查接口
May 12 Javascript
JQuery复选框全选效果如何实现
May 08 jQuery
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
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
2020/10/27 Javascript
[01:54]胎教DOTA2 准妈妈玩家现身中国区预选赛
2016/06/26 DOTA
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python中atexit模块的基本使用示例
2015/07/08 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
如何定义TensorFlow输入节点
2020/01/23 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
Python通过len函数返回对象长度
2020/10/22 Python
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
感恩节活动方案
2014/01/27 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
大学生求职自荐信
2015/03/24 职场文书
大学生逃课检讨书
2015/05/04 职场文书