面向对象的拖拽

1、创建一个div,并简单设置样式

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <style type="text/css">
        #div1 {
            width: 150px;
            height: 150px;
            background-color: yellow;
            position: absolute;
        }
    </style>
   </head>
<body>
    <div id="div1"></div>
</body>
</html>

2、面向过程的方式实现拖拽功能

<script type="text/javascript">
        window.onload = function () {
            var oDiv = document.getElementById("div1");
            oDiv.onmousedown = function (e) {
                var oEvent = e || event;
                var divX = oEvent.clientX - oDiv.offsetLeft;
                var divY = oEvent.clientY - oDiv.offsetTop;
                document.onmousemove = function (e) {
                    var oEvent = e || event;
                    oDiv.style.left = oEvent.clientX - divX + "px";
                    oDiv.style.top = oEvent.clientY - divY + "px";
                };
                document.onmouseup = function () {
                    document.onmousemove = null;
                    document.onmouseup = null;
                }
            };
        };
    </script>

3、面向对象方式实现

 <script type="text/javascript">
        window.onload = function () {
            new Drag("div1");
        };
        function Drag(id) {
            var _this = this;//保存this,指的是Drag,当 new Drag("div1");this变成了div1
            this.divX = 0;
            this.divY = 0;
            this.oDiv = document.getElementById(id);
            this.oDiv.onmousedown = function (e) {
                _this.fnDown(e);
          return false;            };
        }
        Drag.prototype.fnDown = function (e) {
            var _this = this;
            var oEvent = e || event;
            this.divX = oEvent.clientX - this.oDiv.offsetLeft;
            this.divY = oEvent.clientY - this.oDiv.offsetTop;
            document.onmousemove = function (e) {
                _this.fnMove(e);
            };
            document.onmouseup = function () {
                _this.fnUp();
            };
        }
        Drag.prototype.fnMove = function (e) {
            var oEvent = e || event;
            this.oDiv.style.left = oEvent.clientX - this.divX + "px";
            this.oDiv.style.top = oEvent.clientY - this.divY + "px";
        }
        Drag.prototype.fnUp = function () {
            document.onmousemove = null;
            document.onmouseup = null;
        }
    </script>

4、在创建一个div

<style type="text/css">
        #div1, #div2 {
            width: 150px;
            height: 150px;
            background-color: yellow;
            position: absolute;
        }

        #div2 {
            width: 150px;
            height: 150px;
            position: absolute;
            background-color: green;
        }
    </style>
<body>
    <div id="div1">普通拖拽</div>
    <div id="div2">限制范围拖拽</div>
</body>

5、限制范围的拖拽功能直接继承Drag

function LimitDrag(id) {
    Drag.call(this, id);//LimitDrag继承Drag
}
//这样写,避免扩展LimitDrag时影响Drag
for (var i in Drag.prototype) {
    LimitDrag.prototype[i] = Drag.prototype[i];
}
 <script type="text/javascript">
        window.onload = function () {
            new Drag("div1");
            new LimitDrag("div2");
        };

    </script>

6、扩展LimitDrag

//扩展LimitDrag,其实就是重写了父类的fnMove方法
LimitDrag.prototype.fnMove = function (e) {
    var oEvent = e || event;
    var l = oEvent.clientX - this.divX;
    var t = oEvent.clientY - this.divY;
    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";
}

参考资料:http://v.pps.tv/play_362R1J.html

时间: 2024-11-06 01:14:03

面向对象的拖拽的相关文章

面向对象实现拖拽

<!DOCTYPE html><html><head>    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>    <style type="text/css">        #box{position:absolute; left:100px; top:100px; padding:5px; ba

面向对象继承拖拽 写法

JavaScript 面向对象的拖拽

一.body <div id="box"></div> 二.css <style> #box { position: abaolute; top: 0; left: 0; width: 100px; height: 100px; } </style> 三.JavaScript <script> class Drag{ constructor(el) { this.el = el; el.startOffset = null;

拖拽系列二、利用JS面向对象OOP思想实现拖拽封装

接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到这里突然想起一句话“没有任何一个题目是彻底完成的.总还会有很多事情可做......” 我想这句话程序开发大概也适用吧,前端开发人员总是可以结合自己之前学到“拖拽”相关知识,不断扩展.完善.无穷无尽.......     利用匿名函数自执行实现封装 ;(function(){ //do somethi

图片拖拽面向对象写法-1

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>拖拽之面向对象</title> <style> #box1{width: 100px;height: 100px;background-color: #0A246A; position: absolute;} </style> <s

Javascript面向对象拖拽

function Drag(id) { var _this=this; this.disX=0; this.disY=0; this.oDiv=document.getElementById(id); this.oDiv.onmousedown=function(e) { _this.fnDown(e); } } Drag.prototype.fnDown=function(e) { var _this=this; var e=e||event; this.disX=e.pageX-this.o

用面向对象写一个拖拽,并实现继承

思路:先用面过过程的方法将要实现的效果实现出来,然后按照以下步骤将拆分成面向对象 //面向过程的程序改写成面向对象程序不能有函数嵌套 //将window.onload初始化整个程序改为构造函数初始化整个对象 //将面向过程中的变量改为属性 //将面向过程中的函数改为方法 index.html代码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8">

面向对象写选项卡、拖拽

js: 面向对象说白了就是一个黑匣子,所谓黑匣子就是知道具体怎么弄但不了解里面运转流程. 面向对象的组成:属性.方法. 属性其实也就是js里面常用的对象,只不过换了一只叫法. 至于方法则是js里面常用的函数. 唯一两者的区别,属性和方法是被定义的,也就是它们是被束缚的,反之,函数.对象异然. 例子: var a=12; alert(a);               //对象是自由的 var arr=[1,2,3,4]; arr.a=14; alert(arr.a);         //属性被

面向对象拖拽练习题

首先来了解一下,面向对象练习的基本规则和问题: 先写出普通的写法,然后改成面向对象写法项 普通方法变形 ·尽量不要出现函数嵌套函数 ·可以有全局变量 ·把onload函数中不是赋值的语句放到单独函数中 改成面向对象 ·全局变量就是属性 ·函数就是方法 ·onload中创建对象 ·改this指针问题 先把拖拽效果的布局完善好: HTML 结构: <div id="box"></div> csc 样式: #box{position: absolute;width: