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的history历史记录插件
Dec 11 Javascript
js 利用className得到对象的实现代码
Nov 15 Javascript
JS动态调用方法名示例介绍
Dec 18 Javascript
利用a标签自动解析URL分析网址实例
Oct 20 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
Nov 23 Javascript
JavaScript仿商城实现图片广告轮播实例代码
Feb 06 Javascript
js评分组件使用详解
Jun 06 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
Sep 05 Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 Javascript
js核心基础之闭包的应用实例分析
May 11 Javascript
利用JS响应式修改vue实现页面的input值
Sep 02 Javascript
一文彻底理解js原生语法prototype,__proto__和constructor
Oct 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
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
PHP 5.3.0 安装分析心得
2009/08/07 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
2017/05/11 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
详解vue组件开发脚手架
2018/06/15 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
python异常处理和日志处理方式
2019/12/24 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
法国珠宝店:CLEOR
2017/01/29 全球购物
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
电子信息专业自荐书
2014/02/04 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
食品业务员岗位职责
2014/03/18 职场文书
请假条范文大全
2014/04/10 职场文书
刑事代理授权委托书
2014/09/17 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
小学记事作文之200字
2019/08/06 职场文书
Flask搭建一个API服务器的步骤
2021/05/28 Python
解析Java异步之call future
2021/06/14 Java/Android
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis