代码之家  ›  专栏  ›  技术社区  ›  wildpeaks

VEMap:平移和缩放分别工作;同时,缩放不再工作

  •  1
  • wildpeaks  · 技术社区  · 15 年前

    在下面的示例中,这是有效的: -使用夹点放大/缩小(两个手指)

    然而,如果我把两者放在同一时间,那么变焦就不起作用了:你可以在控制台中看到VEMap.ZoomIn文件()或VEMap.ZoomOut公司()被调用,但什么也没有发生(没有错误、异常或任何事情,它只是不做任何事情)。

    很可能存在一个给定的解决方案 http://www.bing.com/maps

    <!DOCTYPE html>
    <html>
    <head>
        <title>VEMap</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.3&mkt=en-us"></script>
    </head>
    <body onload="init()">
    
    
    <div id="mymap" style="position: relative; width: 256px; height: 256px;"></div>
    
    
    <script type="text/javascript">
    // Reference to the VEMap
    var map = null;
    
    // Whether a gesture is being performed currently or not.
    var gesture = false;
    
    // Translates touch event names into similar mouse event names
    var touch2mouse = {"touchstart": "mousedown", "touchmove": "mousemove", "touchend": "mouseup"};
    
    
    // Initializes the map and adds the touch/gesture listeners
    function init(){
        map = new VEMap('mymap');
        map.HideDashboard();
        map.LoadMap(new VELatLong(51.64, -0.18), 9, VEMapStyle.Road);
    
        if (typeof Touch == "object"){
            // Zooms the map using touch-pinch
            document.addEventListener("gesturestart", ongesture, true);
            document.addEventListener("gesturechange", ongesture, true);
            document.addEventListener("gestureend", ongesture, true);
    
            // Pans the map using touch-drag
            // If you comment out these three lines, pinch-zoom works :(
            document.addEventListener("touchstart", ontouch, true);
            document.addEventListener("touchmove", ontouch, true);
            document.addEventListener("touchend", ontouch, true);
        }
    }
    
    
    // One finger interaction
    function ontouch(e){
        var touches = e.changedTouches;
        if ((!gesture) && (touches.length == 1)){
            if (e.type == "touchmove") e.preventDefault();
            var obj = touches[0];
            var e2 = document.createEvent("MouseEvent");
            e2.initMouseEvent(touch2mouse[e.type], true, true, window, 1, obj.screenX, obj.screenY, obj.clientX, obj.clientY, false, false, false, false, 0, null);
            obj.target.dispatchEvent(e2);
        }
    }
    
    // Two fingers interaction
    function ongesture(e){
        e.preventDefault();
        switch(e.type){
            case "gesturestart":
                gesture = true;
            break;
            case "gestureend":
                gesture = false;
                if (e.scale > 1.2){
                    console.log('Attempting to zoom IN.');
                    map.ZoomIn();
                } else if (e.scale < 0.8){
                    map.ZoomOut();
                    console.log('Attempting to zoom OUT.');
                }
            break;
        }
    }
    </script>
    
    
    
    </body>
    </html>
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   ekynoxe    15 年前

    我在msdn论坛的以下地址找到了一些关于viewport的信息,但是对我来说,即使删除viewport meta属性和固定map容器的大小也不会产生任何积极的结果。

    http://social.msdn.microsoft.com/Forums/en-US/vemapcontroldev/thread/342e5807-7bb5-4c54-94d4-095e800fb736

    我希望很快能找到什么。

    推荐文章