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与webservice的通信实现代码
Dec 25 Javascript
javascript实现日历控件(年月日关闭按钮)
Dec 12 Javascript
jQuery封装的获取Url中的Get参数示例
Nov 26 Javascript
JS动态调用方法名示例介绍
Dec 18 Javascript
jquery easyUI中ajax异步校验用户名
Aug 19 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
Dec 08 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
Dec 18 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
Jan 23 Javascript
jQuery动态生成不规则表格(前后端)
Feb 21 Javascript
JavaScript数组去重算法实例小结
May 07 Javascript
JavaScript实现的九种排序算法
Mar 04 Javascript
js 将多个对象合并成一个对象 assign方法的实现
Sep 24 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与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
PHP入门学习的几个不错的实例代码
2008/07/13 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
jtable列中自定义button示例代码
2013/11/21 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
Python如何实现MySQL实例初始化详解
2017/11/06 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
小学运动会口号
2014/06/07 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
国际贸易求职信
2014/07/05 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
个人培训总结
2015/03/05 职场文书
公司承诺书格式范文
2015/04/28 职场文书
2019年思想汇报
2019/06/20 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫
vue打包时去掉所有的console.log
2022/04/10 Vue.js
Vue深入理解插槽slot的使用
2022/08/05 Vue.js