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 EasyUI API 中文文档 搜索框
Sep 29 Javascript
javascript基本类型详解
Nov 28 Javascript
分享一些常用的jQuery动画事件和动画函数
Nov 27 Javascript
高效利用Angular中内置服务$http、$location等
Mar 22 Javascript
JS递归遍历对象获得Value值方法技巧
Jun 14 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
Jun 13 Javascript
详解Angular5 路由传参的3种方法
Apr 28 Javascript
Vue常用指令详解分析
Aug 19 Javascript
Vue 监听列表item渲染事件方法
Sep 06 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
Oct 12 Javascript
详解微信小程序动画Animation执行过程
Sep 23 Javascript
聊聊JS ES6中的解构
Apr 29 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
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
Python实现115网盘自动下载的方法
2014/09/30 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
综合素质的自我鉴定
2013/10/07 职场文书
三方协议书范本
2014/04/22 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
故宫的导游词
2015/01/31 职场文书
新教师个人工作总结
2015/02/06 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python