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进行拖拽
Jul 20 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
Oct 24 Javascript
给文字加上着重号的JS代码
Nov 12 Javascript
给应用部分的js代码设定一个统一的入口
Jun 15 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
Jan 09 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
jQuery ajax请求struts action实现异步刷新
Apr 19 jQuery
在vue里面设置全局变量或数据的方法
Mar 09 Javascript
vue toggle做一个点击切换class(实例讲解)
Mar 13 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 Javascript
vue源码中的检测方法的实现
Sep 26 Javascript
JavaScript分页组件使用方法详解
Jul 26 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
php 多个submit提交表单 处理方法
2009/07/07 PHP
PHP开发中常用的字符串操作函数
2011/02/08 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
JS Loading功能的简单实现
2013/11/29 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
Python 创建空的list,以及append用法讲解
2018/05/04 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
通信生自我鉴定
2014/01/18 职场文书
企业安全生产规章制度
2015/08/06 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
Django rest framework如何自定义用户表
2021/06/09 Python
Selenium浏览器自动化如何上传文件
2022/04/06 Python