[英]MouseUp not working in IE (sigh!!!!)
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;
}
}
}
}
停止伸展功能
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事件没有触发,我必须再次单击以实际停止拉伸元素:(。
删除事件时,您需要传递与添加事件相同的功能。
添加事件处理程序时,您使用了: function() { stopstretching(watcherObj); }
function() { stopstretching(watcherObj); }
对于mouseup
和function() { stopstretching(watcherObj); }
function() { stopstretching(watcherObj); }
for 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);
该代码未经测试,但我认为它应该可以工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.