当前位置: 首页 > 知识库问答 >
问题:

在IE8中使用jQuery平移div

司马英才
2023-03-14

我在IE8中尝试使用jQuery mousemove、mouseup和mousemove事件pan div时遇到了问题。一旦我按下鼠标键,直到我释放鼠标键才检测到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属性。如果我为了使用背景而使图像变小,当我放大时它会变得模糊。

共有1个答案

阎知
2023-03-14

这可能是因为您将mousedown绑定到#layout上,而将其他两个绑定到document上。您可能还想尝试添加

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

防止拖入IE

 类似资料:
  • 问题内容: 我的项目使用jQuery 1.4.2。我已经将一些安全信息添加到我的AJAX标头中了……我这样做的方法是使用$ .ajaxSetup()并设置一个beforeSend函数。 据我了解,这应该在每次调用$ .ajax()时执行,对吗?它可以在Chrome,Firefox,IE9等环境中正常运行,但有时在IE7 / 8中则 不能 。 这是我称之为的地方: 我找到了一种解决方法,可以将bef

  • 我有一个问题是jQuery切换在IE8中不能工作。它可以在所有其他浏览器以及IE9和IE10中工作。我也在使用Bootstrap。 下面是我的示例代码。谁能给我指明正确的方向吗?人类的命运取决于你的答案。:-)

  • 问题内容: 我的数据集如下: 仅使用MySQL窗口函数可以做到这一点吗? 环境详细信息: 服务器版本:8.0.12 MySQL Community Server-GPL 问题答案: 您可以将Window Functions与Frames一起使用 : DB小提琴演示 细节: 表示当前行上方的两行(当前行除外)。我们在上明确定义了升序。因此,这意味着两个最接近的日期,低于当前行的日期 表示当前行。 使

  • 问题内容: 我有以下ajax调用,该调用在Firefox和Chrome中完美运行,但在IE中则不行: 我知道一个事实,所有变量都传递正确的内容,而$ .ajax确实传递所有参数/值。 这就是我遇到的错误: 日志:@错误:未定义日志:@状态:parsererror日志:@状态文本:确定 我知道IE上的缓存问题,并实施了一个随机参数来清除它。 这是我得到的JSON(我可以使用Charles看到它) 最

  • 问题内容: 我已经动态创建了一个复选框。我曾经在单击复选框时调用过一个函数,该函数在Google Chrome和Firefox中有效,但 在Internet Explorer 8中不起作用 。这是我的代码: 是我的事件处理程序。 问题答案: 尝试: 更新: 对于IE9之前的InternetExplorer版本,应使用attachEvent方法将指定的侦听器注册到调用它的EventTarget上,对

  • 问题内容: 我正在创建一个Java应用程序,它将允许用户查看图像并使用鼠标平移图像。为了实现图像的平移,我使用了JViewports 和事件的组合。大部分代码在mouseDragged方法中 虽然这样做有效,但我认为必须有一种更简便的方法来完成所有这些工作。如果不是全部,是否可以替换防止视口从图像移到周围边界的代码? 问题答案: 尝试使用method代替: