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 Ajax请求状态管理器打包
May 03 Javascript
asm.js使用示例代码
Nov 28 Javascript
escape函数解决js中ajax传递中文出现乱码问题
Oct 30 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
Dec 19 Javascript
javascript实现瀑布流动态加载图片原理
Aug 12 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
Jan 23 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
Mar 24 Javascript
微信小程序适配iphoneX的实现方法
Sep 18 Javascript
node app 打包工具pkg的具体使用
Jan 17 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
Jun 21 Javascript
微信小程序实现写入读取缓存详解
Aug 30 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
Mar 11 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
php采集速度探究总结(原创)
2008/04/18 PHP
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
php的一个简单加密解密代码
2014/01/14 PHP
ThinkPHP中的关联模型注意点
2014/06/16 PHP
php构造函数的继承方法
2015/02/09 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
2013/04/24 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
详解微信小程序审核不通过的解决方法
2018/01/17 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
python基于multiprocessing的多进程创建方法
2015/06/04 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
pygame实现简易飞机大战
2018/09/11 Python
python 安装移动复制第三方库操作
2020/07/13 Python
python tkinter实现连连看游戏
2020/11/16 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
大课间活动实施方案
2014/03/06 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
应届毕业生自荐信
2014/05/28 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
中秋节感想
2015/08/10 职场文书
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers