MouseUp не работает в IE (вздох !!!!) - PullRequest
0 голосов
/ 04 января 2011
function startstretchright(aObj) {
    watcherObj = aObj.parentNode.parentNode;

    var dragWorkspaceDiv = document.createElement("div");
    var dragWorkspaceObj = document.body.appendChild(dragWorkspaceDiv);
    dragWorkspaceObj.id = "dragWorkspace";
    dragWorkspaceObj.style.position = "absolute";
    dragWorkspaceObj.style.left = "0px";
    dragWorkspaceObj.style.top = "0px";
    dragWorkspaceObj.style.width = "100%";
    dragWorkspaceObj.style.height = "100%";
    dragWorkspaceObj.style.cursor = "hand";
    dragWorkspaceObj.style.cursor = "pointer";
    dragWorkspaceObj.style.background = "#000000";
    dragWorkspaceObj.style.filter = "alpha(opacity=1)";
    dragWorkspaceObj.style.opacity = .01;
    dragWorkspaceObj.style.MozOpacity = .01;
    dragWorkspaceObj.style.zIndex = "400";

    addEvent(dragWorkspaceObj, 'mouseup', function() { stopstretching(watcherObj); });
    addEvent(dragWorkspaceObj, 'mouseout', function() { stopstretching(watcherObj); });
    addEvent(dragWorkspaceObj, 'mousemove', continuestretching);

    stretchDirection = "right";
    initialX = locateObject(aObj).x;
    initialLeft = watcherObj.style.marginLeft;
    initialWidth = watcherObj.style.width;

    watcherObjLeftBoundary = 0;
    watcherObjRightBoundary = (document.getElementById("dayHeaderContainer").getElementsByTagName("DIV").length * 100);
    var siblingArr = watcherObj.parentNode.getElementsByTagName("DIV");
    var initialLeftEdge = parseFloat(aObj.parentNode.parentNode.style.marginLeft);
    var initialRightEdge = initialLeftEdge + parseFloat(aObj.parentNode.parentNode.style.width);
    for (var i = 0; i < siblingArr.length; i++) {
        if (siblingArr[i].className == "watcher" && siblingArr[i] != watcherObj) {
            var l = parseFloat(siblingArr[i].style.marginLeft);
            var r = l + parseFloat(siblingArr[i].style.width);
            if (r > watcherObjLeftBoundary && r <= initialLeftEdge) {
                watcherObjLeftBoundary = r;
            }
            if (l < watcherObjRightBoundary && l >= initialRightEdge) {
                watcherObjRightBoundary = l;
            }
        }
    }
}

Функция Stop Stretching

function stopstretching(watch) {
    watcherObj = null;
    removeEvent(document.getElementById("dragWorkspace"), 'mouseup', stopstretching);
    removeEvent(document.getElementById("dragWorkspace"), 'mouseout', stopstretching);
    removeEvent(document.getElementById("dragWorkspace"), 'mousemove', continuestretching);
    var objToRemove = document.getElementById("dragWorkspace");
    if (document.all) {
        var oldLayer = objToRemove.removeNode(true);
    } else {
        var oldLayer = objToRemove.parentNode.removeChild(objToRemove);
    }

}

Все отлично работает в Chrome и Firefox, но в IE событие stopstretch не запускается, и мне нужно нажать снова, чтобы фактически остановитьрастяжка элемента :(. Пожалуйста, помогите мне. При мышлении он должен прекратить растяжение.

1 Ответ

0 голосов
/ 04 января 2011

Когда вы удаляете событие, вам нужно передать идентичную функцию, которую вы использовали для его добавления.

Когда вы добавляете обработчик событий, который вы использовали: function() { stopstretching(watcherObj); } для mouseup и function() { stopstretching(watcherObj); } для mouseout (эти два разных)

Поэтому, когда вы удаляете, вы не можете просто использовать stopstretching, потому что это не тот, который вы добавили. Может быть, вы можете иметь что-то вроде

function stopHandler() {
    stopstretching(watcherObj, stopHandler);
}
addEvent(dragWorkspaceObj, 'mouseup', stopHandler);
addEvent(dragWorkspaceObj, 'mouseout', stopHandler);

И

function stopstretching(watch, handler) {
    watcherObj = null;
    removeEvent(document.getElementById("dragWorkspace"), 'mouseup', handler);
    removeEvent(document.getElementById("dragWorkspace"), 'mouseout', handler);

Код не проверен, но я думаю, что он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...