【问题标题】:Panning a div in IE8 using jQuery使用 jQuery 在 IE8 中平移 div
【发布时间】:2012-08-31 11:33:08
【问题描述】:

我在尝试使用 jQuery mousemove、mouseup 和 mousemove 事件在 IE8 中平移 div 时遇到问题。一旦我按下 mousedown,直到我释放鼠标按钮后才会检测到 mousemove,而要检测 mouseup,我必须再次按下鼠标按钮。

这里是javascript:

// ********** CLICK AND DRAG MAP PANNING ********** //
            var mouseDown = false;
            var mouseX = 0;
            var mouseY = 0;
            var originalLeft = $("#layout").offset().left;
            var originalTop = $("#layout").offset().top;

            $("#layout").mousedown(function(event){
                mouseDown = true;
                mouseX = event.pageX;
                mouseY = event.pageY;
                originalLeft = $("#layout").offset().left;
                originalTop = $("#layout").offset().top;
                return false;
            });

            $(document).mouseup(function(){
                mouseDown = false;
                return false;
            });

            $(document).mousemove(function(event){
                if (mouseDown == true) {
                    var panLeft = (event.pageX - mouseX);
                    var panTop = (event.pageY - mouseY);
                    var left = originalLeft + panLeft;
                    var top = originalTop + panTop;

                    // Constrain the map
                    var container = $("#map");
                    var map = $("#layout");

                    if (left >= container.offset().left) {
                        left = container.offset().left;
                    } else if (left + map.width() <= container.offset().left + container.width()) {
                        left = container.offset().left + container.width() - map.width();
                    }

                    if (top >= container.offset().top) {
                        top = container.offset().top;
                    } else if (top + map.height() <= container.offset().top + container.height()) {
                        top = container.offset().top + container.height() - map.top();
                    }

                    $("#layout").offset({ left: left, top: top });
                } else {
                    return false;
                }
            });
            // ********** ********** ********** //

这里是html:

<div id="map">
    <div id="layout">
        <img src="images/map.png" alt="map"/>
    </div>
</div>

#layout div 中的图像设置为与 div 相同的大小。我认为在 IE8 中可能存在问题,它认为我正在尝试拖动图像。不过,不确定是否是这种情况,我考虑过将其设为背景,但由于 IE 不使用 background-size 属性,因此我无法正确调整其大小。如果我将图像缩小以使用背景,则在放大时会变得模糊。

【问题讨论】:

  • 您的问题是否意味着它在 Chrome/FF/Safari/Opera/IE9 中运行良好?
  • 您知道现有的脚本可以做到这一点而无需重新发明轮子吗?前:aino.github.com/pan.js

标签: javascript jquery html internet-explorer-8


【解决方案1】:

这可能是因为您将mousedown 绑定到#layout 而另外两个绑定到document。您可能还想尝试添加:

if ( 'attachEvent' in document ) {
    document.attachEvent('ondragstart', function() { return false; });
}

防止在IE中拖拽

【讨论】:

  • 如果我将 mousedown 绑定到文档,那么用户单击的任何位置开始平移地图,这不是我想要的。如果我将 mouseup 和 mousemove 绑定到#layout,那么当用户移动到 #layout div 之外时会产生问题。
  • 还不错。请参阅我的编辑,如果您防止在 IE 中拖动可能会有所帮助。
  • 那行得通。我不打算在页面上添加任何可拖动元素,但如果我这样做了,你知道这是否会导致任何问题吗?我确实找到了另一个似乎可行的潜在解决方案,即将属性“unselectable=on”附加到地图图像。我不确定哪个是更好的方法。我让它检测是否使用了 IE8 或更低版本,附加该属性。
猜你喜欢
  • 1970-01-01
  • 2014-02-15
  • 2015-09-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多