javascript - 请解释一下这段代码的含义

标签 javascript dom

我正在阅读以下地址的教程:http://www.stanford.edu/~ouster/cgi-bin/cs142-spring12/lecture.php?topic=event

我不明白我用星号标记的行中的代码。

function Dragger(id) {
    this.isMouseDown = false;
    this.element = document.getElementById(id);
    var obj = this;
    this.element.onmousedown = function(event) {
        obj.mouseDown(event);
    }
}

Dragger.prototype.mouseDown = function(event) {
    var obj = this;
    this.oldMoveHandler = document.body.onmousemove;  /******/
    document.body.onmousemove = function(event) {     /******/
        obj.mouseMove(event);
    }
    this.oldUpHandler = document.body.onmouseup;      /******/
    document.body.onmouseup = function(event) {       /******/
        obj.mouseUp(event);
    }
    this.oldX = event.clientX;
    this.oldY = event.clientY;
    this.isMouseDown = true;
}

Dragger.prototype.mouseMove = function(event) {
    if (!this.isMouseDown) {
        return;
    }
    this.element.style.left = (this.element.offsetLeft
            + (event.clientX - this.oldX)) + "px";
    this.element.style.top = (this.element.offsetTop
            + (event.clientY - this.oldY)) + "px";
    this.oldX = event.clientX;
    this.oldY = event.clientY;
}

Dragger.prototype.mouseUp = function(event) {
    this.isMouseDown = false;
    document.body.onmousemove = this.oldMoveHandler;   /******/
    document.body.onmouseup = this.oldUpHandler;       /******/
}

最佳答案

this.oldMoveHandler 引用的目的是存储页面的先前开发人员可能添加到“document.body.onmousemove”的任何事件处理程序,目的是不中断开发人员毫无疑问花费痛苦时间的任何行为 build 。事情是这样的:

  1. 按下鼠标,存储旧的处理程序,添加我们精美的拖动处理程序。

  2. 移动鼠标,会发生可爱的拖动行为。

  3. 释放鼠标,拖动行为停止,恢复旧的处理程序(即使它为空)。

这是一种避免以前代码干扰的方法,尽管这是一个糟糕的解决方案。对于野蛮的 IE 浏览器,更优选的方法是使用 addEventListener/removeEventListener 或 AttachEvent/detachEvent。这些函数的设计使得多个处理程序可以订阅同一事件,而无需相互干扰。以下是一些不错的读物:

http://www.quirksmode.org/js/introevents.html

关于javascript - 请解释一下这段代码的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18337034/

相关文章:

javascript - 因 knockout 陷入麻烦

javascript - promise 错误/异常处理设计

javascript - 使用JSON创建polymer core-menu/core-submenu

javascript - appendChild 不是一个函数 - 我做错了什么?

javascript - 如何将 body 元素添加到空 DOM 文档?

javascript 等同于不依赖 innerHTML 的 html_entity_decode?

javascript - iframe 背景图像在 Firefox 中显示正常但在 IE 中显示不正常

javascript - 如何计算 DIV 或 P 中的行框数量

javascript dom 检查代码在 IE 上不起作用

java - 从 dom 中删除未选择的节点