• JS面向对象组件(六) -- 拖拽功能以及组件的延展


    HTML部分

        <div id="div1"></div>
        <div id="div2"></div>

    CSS部分

        <style>
            #div1{ 100px;height: 100px;background-color: red;position: absolute;}
            #div2{ 100px;height: 100px;background-color: blue;position: absolute;left:100px;}
        </style>

    普通JS写法

        //普通写法
       function Drag(id){
            var obj = document.getElementById(id);
            var disX = 0;
            var disY = 0;
            obj.onmousedown = function(ev){
                var ev = ev || window.event;
                disX = ev.clientX - obj.offsetLeft;
                disY = ev.clientY - obj.offsetTop;
                document.onmousemove = function(ev){
                    var ev = ev || window.event;
                    obj.style.left = ev.clientX - disX + "px";
                    obj.style.top = ev.clientY - disY + "px";
                }
                document.onmouseup = function(){
                    document.onmouseup = document.onmousemove = null;
                }
            }
        }
    
        window.onload = function(){
            Drag("div1");
            Drag("div2");
    }

    面向对象的写法:

        function Drag(id){
            this.obj = document.getElementById(id);
            this.disX = 0;
            this.disY = 0;
        }
        Drag.prototype.init = function(){
            var that = this;
            this.obj.onmousedown = function(ev) {
                var ev = ev || window.event;
                that.fnDown(ev);
    
                document.onmousemove = function (ev) {
                    var ev = ev || window.event;
                    that.fnMove(ev);
                }
                document.onmouseup = function () {
                    document.onmousemove = null;
                    document.onmouseup = null;
                }
            }
            return false;
        }
        Drag.prototype.fnDown = function(ev){
            this.disX = ev.clientX - this.obj.offsetLeft;
            this.disY = ev.clientY - this.obj.offsetTop;
        };
        Drag.prototype.fnMove = function(ev){
            this.obj.style.left = ev.clientX - this.disX + 'px';
            this.obj.style.top = ev.clientY - this.disY + 'px';
        };
    
      //继承父类的子组件 function childDrag(id){ Drag.call(
    this,id); }
       function extend(obj1,obj2){
    for(var attr in obj2) { obj1[attr] = obj2[attr]; } } extend(childDrag.prototype,Drag.prototype);
       //重新定义fnMove函数 childDrag.prototype.fnMove
    = function(ev){ var L = ev.clientX - this.disX; var T = ev.clientY - this.disY; if(L<0){ L = 0; }else if(L>document.documentElement.clientWidth - this.obj.offsetWidth){ L = document.documentElement.clientWidth - this.obj.offsetWidth; } if(T<0){ T = 0; }else if(T>document.documentElement.clientHeight - this.obj.offsetHeight){ T = document.documentElement.clientHeight - this.obj.offsetHeight; } this.obj.style.left = L + 'px'; this.obj.style.top = T + 'px'; }; window.onload = function(){ var obj = new Drag("div1"); obj.init(); var obj2 = new childDrag("div2"); obj2.init(); }
  • 相关阅读:
    kubernetes之配置Pod的Volume存储
    kubernetes之配置Pod的QoS
    kubernetes之定义容器和Pod的CPU资源
    kubernetes之定义容器和Pod的内存资源
    kubernetes之配置namespace中Pod的总数
    kubernetes之配置namespace中CPU最大最小值约束
    kubernetes之配置namespace中内存最大最小值约束
    kubernetes之配置namespace的默认CPU请求和限制
    Kubernetes之配置namespace的默认内存请求和限制
    信步漫谈之Jmeter—引入外部函数加解密报文
  • 原文地址:https://www.cnblogs.com/wanliyuan/p/5244558.html
Copyright © 2020-2023  润新知