سؤال

أواجه مشكلة صغيرة مع خرائط Google API، وكنت أتساءل عما إذا كان بإمكان أي شخص المساعدة.أحاول فتح نوافذ المعلومات باستخدام بعض HTML في احتواء HREF.يمكنني الآن استخدام "X" لإغلاق النافذة ولكنني أفضّل الطريقة الثانية لمؤقت Javascript لإغلاق نوافذ المعلومات كما هو موضح أدناه..

setTimeout('infowindow. Close(map,marker)','2000');

ومع ذلك، يُبلغ المتصفح أن نافذة المعلومات غير موجودة بعد انتهاء مدة ثانيتين.لإصلاح المشكلة، حاولت إضافة كائنات infowindow وكائنات العلامات إلى مصفوفة في النطاق العام، ولكن هذا لم يحل المشكلة.

لقد قمت بإرجاع الكود إلى حالته الأصلية وسأكون ممتنًا لأي نصيحة بخصوص هذه المشكلة.

<!DOCTYPE html> 
    <html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title></title> 
    <link href="http://code.google.com/apis/maps/documentation/javascript/examples/standard.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
    <script type="text/javascript"> 

    var geocoder;
    var map;
    var markers = [];
    var info = [];
    var i = 0;

    function initialize()
    {
       geocoder = new google.maps.Geocoder();
       var latlng = new google.maps.LatLng(40.768505, -111.853244);
       var myOptions =
       {
          zoom: 8,
          center: latlng,
          mapTypeId: google.maps.MapTypeId.ROADMAP
       }
       map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
       addPostCode('bb9 5pl','HTML');
       addPostCode('bb9 7de','HTML');
       addPostCode('bb12 7nq','HTML');
       addPostCode('bb4 6be','HTML');
    }

    function addPostCode(zip, html)
    {
       geocoder.geocode(
       {
          'address': zip
       }, function (results, status)
       {
          if (status == google.maps.GeocoderStatus.OK)
          {
             map.setCenter(results[0].geometry.location);
             var marker = new google.maps.Marker(
             {
                map: map,
                position: results[0].geometry.location,
                name: zip
             });

            var infowindow = new google.maps.InfoWindow({
            content: html
            });

            google.maps.event.addListener(marker, 'mouseover', function() 
            { 
              infowindow.open(map,marker); 
              setTimeout('infowindow.close(map,marker)','2000'); 
            });


            i++;
          }
          else
          {
             alert("Geocode was not successful for the following reason: " + status);
          }
       });
    }

    function checkZip(zip)
    {
       var distance = Number.MAX_VALUE;
       var index = 0;
       geocoder.geocode(
       {
          'address': zip
       }, function (results, status)
       {
          if (status == google.maps.GeocoderStatus.OK)
          {
             for (ix = 0; ix < markers.length; ix++)
             {
                var tmp = getDistance(results[0].geometry.location, markers[ix].position);
                if (tmp < distance)
                {
                   distance = tmp;
                   index = ix;
                }
             }
             alert('nearest zipcode is :' + markers[index].name + ' Distance:' + distance) 
          }
       });
    }

    function getDistance(latlng1, latlng2)
    {
       var R = 6371; // Radius of the earth in km 
       var dLat = (latlng2.lat() - latlng1.lat()) * Math.PI / 180; // Javascript functions in radians 
       var dLon = (latlng2.lng() - latlng1.lng()) * Math.PI / 180;
       var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(latlng1.lat() * Math.PI / 180) 
               * Math.cos(latlng2.lat() * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
       var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
       var d = R * c; // Distance in km 
       d = d * 0.621371192;
       return d;
    }

    </script> 
    </head> 
    <body onload="initialize()"> 
      <div> 
        <input id="address" type="textbox" value=""> 
        <input type="button" value="Geocode" onclick="checkZip(getElementById('address').value)"> 
      </div> 
    <div id="map_canvas" style="height:500px; width: 600px;"></div> 
    </body> 
    </html> 
هل كانت مفيدة؟

المحلول

infowindow في مكالمة setTimeout الخاصة بك تكون خارج النطاق عند تشغيلها.قم بتغيير هذا الاستدعاء إلى ما يلي لتصحيح هذا باستخدام الإغلاق:

setTimeout(function(){infowindow.close();}, '2000');
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top