Javascript 面向对象编程之拖拉

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
#div1{ width:200px; height:200px; background:yellow; position:absolute; z-index:555;}
#div2{ width:200px; height:200px; background:green; position:absolute;}
</style>
<script>

window.onload=function(){
new Drag("div1");//拖拉构造函数对象
new LimitDrag("div2");//继承Drag对象方法,属性

}

function Drag(id)
{
var _this=this;//子涵数引用对象
this.disX=0;//设置变量
this.disY=0;
this.oDiv=document.getElementById(id);
this.oDiv.onmousedown=function(ev){//点击执行涵数FnDown/
//console.log(_this);
_this.fnDown(ev);
return false;

}
}

Drag.prototype.fnDown=function(ev)
{

var _this=this;
var oEvent=ev||event;//兼容IE的鼠标坐标
this.disX=oEvent.clientX-this.oDiv.offsetLeft;//鼠标点击位置到div左边的距离
this.disY=oEvent.clientY-this.oDiv.offsetTop;//鼠标点击位置到div顶边的距离
//console.log(this.disX+":"+this.disY);
document.onmousemove=function(ev)//移动时执行涵数
{
_this.fnMove(ev);
}
document.onmouseup=function(ev)//放松时执行涵数
{
_this.fnUp(ev);
}
}

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.disX+"PX"
}
Drag.prototype.fnUp=function()
{
document.onmousemove=null;
document.onmouseup=null;
}

function LimitDrag(id)//继承涵数
{
Drag.call(this,id);//继承属性 ,call调用一个对象的一个方法,以另一个对象替换当前对象。
}
for(var i in Drag.prototype)
{
LimitDrag.prototype[i]=Drag.prototype[i];//继承方法
}
LimitDrag.prototype.fnMove=function(ev)//自己特有方法
{
var oEvent=ev||event;
var l=oEvent.clientX-this.disX;//获取left边距离
var t=oEvent.clientY-this.disY;//获取top边距离
if(l<0)
{
l=0;
}
else if(l>document.documentElement.clientWidth-this.oDiv.offsetWidth)
{
l=document.documentElement.clientWidth-this.oDiv.offsetWidth;
}
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>

时间: 2024-11-09 11:24:30

Javascript 面向对象编程之拖拉的相关文章

深入理解JavaScript系列(17):面向对象编程之概论

介绍 在本篇文章,我们考虑在ECMAScript中的面向对象编程的各个方面(虽然以前在许多文章中已经讨论过这个话题).我们将更多地从理论方面看这些问题. 特别是,我们会考虑对象的创建算法,对象(包括基本关系 - 继承)之间的关系是如何,也可以在讨论中使用(我希望将消除之前对于JavaScript中OOP的一些概念歧义). 英文原文:http://dmitrysoshnikov.com/ecmascript/chapter-7-1-oop-general-theory/ 概论.范式与思想 在进行E

OOP面向对象编程之java打飞机游戏

#写在前面 继上一篇OOP面向对象编程之俄罗斯方块项目实现过程,OOP面向对象编程之java打飞机游戏,其实写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习(顺便做50个深蹲,嘿嘿,平时干嘛去了),看图:   #完整代码   敌飞机 package com.tarena.fly; import java.util.Random; /** * 敌飞机: 是飞行物,也是敌人 */ public class Airplane extends FlyingObject imp

深入理解JavaScript系列(18):面向对象编程之ECMAScript实现(推荐)

介绍 本章是关于ECMAScript面向对象实现的第2篇,第1篇我们讨论的是概论和CEMAScript的比较,如果你还没有读第1篇,在进行本章之前,我强烈建议你先读一下第1篇,因为本篇实在太长了(35页). 英文原文:http://dmitrysoshnikov.com/ecmascript/chapter-7-2-oop-ecmascript-implementation/ 注:由于篇幅太长了,难免出现错误,时刻保持修正中. 在概论里,我们延伸到了ECMAScript,现在,当我们知道它OOP

浅谈:javascript的面向对象编程之基础知识的介绍

在进入javascript的面对对象之前,我们先来介绍一下javascript的几个概念. 1.javascript的面向对象的基本概念 function aa(){ } /* * 这里的aa,在我们以前看来他是一个函数,确实如此,但是从现在的角度来看 * aa不仅仅是一个函数,他还是一个对象.在javascript中,一切都是对象,函数也不例外 * 我们可以给对象的属性赋值,例如aa.b = 5,还可以获取对象的值,例如 * 这种赋值可以直接赋值,不需要声明,直接aa.属性=xxx,即可为aa

浅谈:javascript的面向对象编程之具体实现

下面的javascript代码都是需要使用jQuery插件来做的.希望大家可以搭建好工作环境 首先我们来做一个练习:在一个删除的超链接中添加一个提示信息,提示是否确认删除. 一般情况下我们都会这么做 <html> <head> <title>delete.html</title> </head> <script type="text/javascript"> function deleteTest(){ windo

JavaScript教程之JavaScript就这么回事

JavaScript就这么回事1-5(转的一个不错的JavaScript基础教程)2008年01月06日 星期日 13:55JavaScript就这么回事1-5(转的一个不错的JavaScript基础教程) 有些时候你精通一门语言,但javascript教程是会发现你其实整天在和其它语言打交道,也许你以为这些微不足道,不至于影响你的开发进度,但恰恰是这些你不重视的东西会浪费你很多时间,我一直以为我早在几年前就已经精通JavaScript了,直到目前,我才越来越觉得JavaScript远比我想象的

JS面向对象编程之:封装、继承、多态

最近在实习公司写代码,被隔壁的哥们吐槽说,代码写的没有一点艺术.为了让我的代码多点艺术,我就重新温故了<javascript高级程序设计>(其中几章),然后又看了<javascript设计模式>,然后觉得要写点心得体会,来整理自己所学的吧.以下是我个人见解,错了请轻喷,欢迎指出错误,乐于改正. 一.封装 (1)封装通俗的说,就是我有一些秘密不想让人知道,就通过私有化变量和私有化方法,这样外界就访问不到了.然后如果你有一些很想让大家知道的东西,你就可以通过this创建的属性看作是对象

javascript高级程序设计---拖拉事件

拖拉事件 拖拉指的是,用户在某个对象上按下鼠标键不放,拖动它到另一个位置,然后释放鼠标键,将该对象放在那里. 拖拉的对象有好几种,包括Element节点.图片.链接.选中的文字等等.在HTML网页中,除了Element节点默认不可以拖拉,其他(图片.链接.选中的文字)都是可以直接拖拉的.为了让Element节点可拖拉,可以将该节点的draggable属性设为true. <div draggable="true"> 此区域可拖拉 </div> draggable属

JS面向对象编程之对象(简化版)

上次网上看了一篇这个文章,然后乱七八糟晕头转向把我晕的够呛.看了半天没找到错的地方但是浏览器Hello world就是没有定义...我也是醉了,最后发现我认为是废话的话一句话竟然有用!!!所以我还是简化一下,大家看着都舒服 首先先实例化一个函数 function HelloWorld(){    alert('hello world!');} 然后针对这个函数给他new一个 function _test(){    var obj = new HelloWorld();} 然后调用方法可以使用t