javascript - 使用 JavaScript 裁剪图像在 IE 中有效,但在 Firefox 中无效

标签 javascript dom-events crop

Possible Duplicate:
How do we prevent default actions in JavaScript?

在下面的代码中,我尝试为图表创建缩放功能。我在 IE 上测试了它并且它有效,但是当我在 Firefox 上尝试它时,浏览器似乎没有取消默认操作并尝试拖动整个图像。我不明白为什么它不起作用!

JsFiddle

<img onmousedown="startDrag" onmousemove="drag" onmouseup="stopDrag" src="ChartImageSource">
MouseDownPosition = null;

startDrag = function (s, e) {
    if (!this.MouseDownPosition && e.which == 1) {
        this.MouseDownPosition = {
            x: e.clientX,
            y: e.clientY
        };
        this.Box = document.createElement("div");
        $(this.Box).attr('id', 'zoomBox').css({ 'border-style': 'solid', 'border-color': 'black', 'border-width': '1px', 'position': 'absolute', 'z-index': '1000', 'left': e.clientX + 'px', 'top': e.clientY + 'px', 'width': '0px', 'height': '0px' });
        $(s).parent().append(this.Box);
    }
};
drag = function (s, e) {
    if (this.MouseDownPosition) {
        e.preventDefault();
        var initX = this.MouseDownPosition.x;
        var initY = this.MouseDownPosition.y;
        var curX = e.clientX;
        var curY = e.clientY;
        var left;
        var top;
        var width;
        var height;
        if (curX - initX >= 0) {
            width = curX - initX + 'px';
            left = initX + 'px';
        } else {
            width = -curX + initX + 'px';
            left = curX + 'px';
        }
        if (curY - initY >= 0) {
            height = curY - initY + 'px';
            top = initY + 'px';
        } else {
            height = -curY + initY + 'px';
            top = curY + 'px';
        }
        $(this.Box).css({ 'width': width, 'height': height, 'left': left, 'top': top });
    }
};
stopDrag = function (s, e) {
    if (this.MouseDownPosition) {
        var initX = this.MouseDownPosition.x;
        var initY = this.MouseDownPosition.y;
        var curX = e.clientX;
        var curY = e.clientY;
        var curOffX = e.offsetX;
        var curOffY = e.offsetY;
        var initOffX = ((curX - initX) ? initX - curX : -(initX - curX)) + curOffX;
        var initOffY = ((curY - initY) ? initY - curY : -(initY - curY)) + curOffY;
        var MinPixX = initOffX <= curOffX ? initOffX : curOffX;
        var MaxPixX = initOffX >= curOffX ? initOffX : curOffX;
        var MinPixY = initOffY <= curOffY ? initOffY : curOffY;
        var MaxPixY = initOffY >= curOffY ? initOffY : curOffY;
        s.parentNode.removeChild(this.Box);
        this.MouseDownPosition = null;
    }
};

最佳答案

e.preventDefault(); 还不够。您还需要调用 e.stopPropagation();

参见:http://www.quirksmode.org/js/events_order.html

关于javascript - 使用 JavaScript 裁剪图像在 IE 中有效,但在 Firefox 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14198664/

相关文章:

javascript - Vue - 包装 HTML5 元素

javascript - 使用 zoom javascript 触发谷歌地图点击事件

android - 在 Android 中获取图片的一部分?

Python:基于暗图像上特定颜色的矩形轮廓(OpenCV)

linux - 将 Canvas 大小裁剪为透明 png 文件中可见图像大小的脚本

javascript - 发送通过 AJAX 更改的元素的值

javascript - 没有所有切片的 HIghcharts 圆环图

Javascript CustomEvent 详细信息在触发时为空?

javascript - 调度点击事件并保留击键修饰符

javascript - 避免在 IE 中出现奇怪的自动滚动