【问题标题】:IE 9, 10: div structure and eventsIE 9、10:div 结构和事件
【发布时间】:2014-11-27 13:59:49
【问题描述】:

我有一个不那么复杂的<div> 结构,它破坏了 IE

<div id="container">
    <div id="layer">
        <div id="layer1">
            <img src="http://sopos.org/olli/blindbild.png" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" />
        </div>
    </div>
    <div id="controls">
        <div id="controller"></div>
        <input id="slider" type="range" />
    </div>
    <div id="thumbnailer">
        <img src="http://sopos.org/olli/blindbild-thumb.png" />
        <div id="viewArea"></div>
    </div>
</div>

这些是注册的事件处理程序:

$(function () {
    var stopPropagation = function (e) {
        e.stopPropagation();
        e.preventDefault();
        e.stopImmediatePropagation();
    }
    $('#controller').on('mousedown', function (e) {
        console.log('controller mousedown');
    });
    $('#controls').on('mousewheel', function (e) {
        console.log('controls mousewheel');
        stopPropagation(e);
        return false;
    });
    $('#thumbnailer').on('click', function (e) {
        console.log('thumbnailer clicked');
    });
    $('#viewArea').on('click', function (e) {
        console.log('viewarea click');
        stopPropagation(e);
        return false;
    });
    $('#viewArea').on('mousedown', function (e) {
        console.log('viewarea mousedown');
        stopPropagation(e);
        return false;
    });
    $('#slider').on('change', function (e) {
        console.log('slider change');
        stopPropagation(e);
        return false;
    });
});

主要问题似乎是 CSS 定位和大小:

#layer {
    position: absolute;
    top: -175.813008130081px;
    left: -578.615px;
    width: 1421px;
    height: 875px;
}
#layer1, #layer1 img {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}
#controls {
    position: absolute;
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100%;
}
#thumbnailer {
    background-color: rgba(150, 150, 150, 0.7);
    border: 1px solid rgb(150, 150, 150);
    position: absolute;
    bottom: 15px;
    right: 10px;
    width: 200px;
    height: 123px;
}
#thumbnailer img {
    width: 100%;
    height: 100%;
}
#viewArea {
    position: absolute;
    top: 25px;
    left: 81px;
    border: 1px solid #f00;
    width: 56%;
    height: 56%;
}
#controller {
    width: 100%;
    height: 100%;
}
#slider {
    position: absolute;
    bottom: 10px;
    left: 200px;
}

在 IE viewArea 的任何点击或mousedown 均未处理;相反,thumbnailer 上的事件被触发。同样,controls 上的mousewheel 事件和controller 上的mousedown 也不会得到处理。不过,当光标在 slider 元素上时,会触发 mousewheel 事件。

这种奇怪的行为似乎源于两张图片的大小。但是,我的应用程序需要在相对较小的容器中显示更大的图像(因此设置了overflow: hidden)。

我为此创建了一个fiddle

【问题讨论】:

    标签: javascript dom-events internet-explorer-9 internet-explorer-10


    【解决方案1】:

    问题似乎是 IE <div> 上触发事件。在 div 中添加一个透明的&lt;img&gt; 即可解决问题:

    <div id="container">
        <div id="layer">
            <div id="layer1">
                <img src="http://sopos.org/olli/blindbild.png" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" />
            </div>
        </div>
        <div id="controls">
            <div id="controller">
               <img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="width:100%; height:100%;">
            </div>
            <input id="slider" type="range" />
        </div>
        <div id="thumbnailer">
            <img src="http://sopos.org/olli/blindbild-thumb.png" />
            <div id="viewArea">
               <img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="width:100%; height:100%;">
            </div>
        </div>
    </div>
    

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 2013-06-20
      • 1970-01-01
      • 2013-12-23
      • 2018-03-03
      • 2013-12-01
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多