Jquery 传单修复了地图双击功能在Firefox中滚动后无法正常工作的问题

Jquery 传单修复了地图双击功能在Firefox中滚动后无法正常工作的问题,jquery,html,map,doctype,leaflet,Jquery,Html,Map,Doctype,Leaflet,这个问题发生在Firefox和IE中,Chrome和Safari工作得很好。我有一张地图,上面有固定位置的传单,当我双击地图缩放时,它会向上滚动,不会出现问题。但是,当我向下滚动时,缩放会转到其他地方(南部),如果向下滚动得更深,缩放会增加 如果删除DOCTYPE,我可以解决这个问题,但我不想这样做 要重现这个问题,只需在Firefox中执行代码,向下滚动并双击地图进行缩放 注意:我通过了W3C验证程序,所以问题可能来自传单 代码如下: <!DOCTYPE html> <htm

这个问题发生在Firefox和IE中,Chrome和Safari工作得很好。我有一张地图,上面有固定位置的传单,当我双击地图缩放时,它会向上滚动,不会出现问题。但是,当我向下滚动时,缩放会转到其他地方(南部),如果向下滚动得更深,缩放会增加

如果删除DOCTYPE,我可以解决这个问题,但我不想这样做

要重现这个问题,只需在Firefox中执行代码,向下滚动并双击地图进行缩放

注意:我通过了W3C验证程序,所以问题可能来自传单

代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Test</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script type="text/javascript" src="http://cdn.leafletjs.com/leaflet-0.5.1/leaflet.js"></script>
        <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.5/leaflet.css">
        <style type="text/css">

    body {
        height: 4000px;
    }

    #map {
        position: fixed;
        width: 500px;
        height: 300px;
        top: 50px;
        left: 100px;
    }
    </style>
</head>

<body>

    <div id="map"></div>

    <script type="text/javascript">
    // Initialize the map on the "map" div
    map = L.map('map', {
        maxZoom: 18,
        minZoom: 12,
        zoom: 14,
        scrollWheelZoom: false
    });

    map.setView([51.505, -0.09], 13);

    L.tileLayer('http://{s}.tile.cloudmade.com/12099dbdd2c7459d99b220fea3008f7d/997/256/{z}/{x}/{y}.png').addTo(map);
    </script>
</body>

试验
身体{
高度:4000px;
}
#地图{
位置:固定;
宽度:500px;
高度:300px;
顶部:50px;
左:100px;
}
//在“映射”div上初始化映射
map=L.map('map'{
maxZoom:18,
minZoom:12,
缩放:14,
滚轮缩放:错误
});
地图.setView([51.505,-0.09],13);
L.tileLayer('http://{s}.tile.cloudmake.com/12099dbdd2c7459d99b220fea3008f7d/997/256/{z}/{x}/{y}.png').addTo(map);

另外,这里是jsfiddle中的示例:(记住,在Chrome/Safari中它是有效的)


非常感谢您的帮助。

我添加了
dblclick
处理程序:

我发现用于缩放的
e.containerPoint
在不同的滚动下有不同的值

查看计算位置
e.containerPoint

getMousePosition: function (e, container) {

    var body = document.body,
    docEl = document.documentElement,
    x = e.pageX ? e.pageX : e.clientX + body.scrollLeft + docEl.scrollLeft,
    y = e.pageY ? e.pageY : e.clientY + body.scrollTop + docEl.scrollTop,
    pos = new L.Point(x, y);

    return (container ? pos._subtract(L.DomUtil.getViewportOffset(container)) : pos);
}
因此,您可以尝试检查此方法并将其替换为代码,以使用
e.clientX
e.clientY
代替
e.pageX
e.pageY


我认为这是因为leafled没有计划用于固定位置。例如,当您滚动页面时,地图也将在正常模式下滚动(如上的示例)。当您尝试使其固定时,地图不会使用页面滚动(在您的情况下)滚动,但仍会考虑滚动以进行位置检测。

我添加了
dblclick
处理程序:

我发现用于缩放的
e.containerPoint
在不同的滚动下有不同的值

查看计算位置
e.containerPoint

getMousePosition: function (e, container) {

    var body = document.body,
    docEl = document.documentElement,
    x = e.pageX ? e.pageX : e.clientX + body.scrollLeft + docEl.scrollLeft,
    y = e.pageY ? e.pageY : e.clientY + body.scrollTop + docEl.scrollTop,
    pos = new L.Point(x, y);

    return (container ? pos._subtract(L.DomUtil.getViewportOffset(container)) : pos);
}
因此,您可以尝试检查此方法并将其替换为代码,以使用
e.clientX
e.clientY
代替
e.pageX
e.pageY


我认为这是因为leafled没有计划用于固定位置。例如,当您滚动页面时,地图也将在正常模式下滚动(如上的示例)。当你试图使它固定地图不滚动页面滚动(在你的情况下),但滚动仍然被认为是位置检测。

这为我也固定了它。我在最新的Chrome上注意到了这一点,即使没有位置:固定。为什么不向传单GitHub项目提交问题/PR?没有
位置的问题:已修复
是错误。
位置问题:修复了类似外观的功能。在你的Chrome浏览器中,它可以工作,但是你确定它可以在所有主流浏览器中工作,并且可以抵抗页面位置的变化吗?如果您认为
position:fixed
的问题必须在核心中实现,您可以自己提交。这也为我解决了它。我在最新的Chrome上注意到了这一点,即使没有位置:固定。为什么不向传单GitHub项目提交问题/PR?没有
位置的问题:已修复
是错误。
位置问题:修复了类似外观的功能。在你的Chrome浏览器中,它可以工作,但是你确定它可以在所有主流浏览器中工作,并且可以抵抗页面位置的变化吗?如果您认为
position:fixed
的问题必须在核心中实现,您可以自己提交。