تعامل با نقشه

این صفحه رویدادهای میانای کاربر و رویدادهای خطایی را که می‌توانید به‌طور برنامه‌نویسی‌شده به آن‌ها گوش دهید و آن‌ها را مدیریت کنید شرح می‌دهد.

رویدادهای میانای کاربر

این بخش رویدادهای تعاملی و اعلان‌های تغییر وضعیت را که می‌توانید هنگام کار با نقشه‌های سه‌بعدی به‌طور برنامه‌ریزی‌شده به آن‌ها گوش دهید و آن‌ها را مدیریت کنید، شرح می‌دهد. جاوا اسکریپت در مرورگر رویدادمحور است، یعنی با تولید رویدادهایی که برنامه‌تان می‌تواند به آن‌ها گوش دهد و کد را براساس آن اجرا کند، به تعاملات کاربر پاسخ می‌دهد.

دو نوع اصلی رویداد وجود دارد:

  • رویدادهای تعامل کاربر (مانند کلیک‌های موشواره) از نمای سه‌بعدی نقشه به کد شما منتقل می‌شوند. این رویدادها به شما امکان می‌دهند به کنش‌های مستقیم کاربر در محیط نقشه سه‌بعدی پاسخ دهید. مشاهده نمونه.
  • اعلان‌های تغییر وضعیت، به‌روزرسانی‌های مدل‌های داده نقشه سه‌بعدی و وضعیت پرداز زدن را بااستفاده از طرح نام‌گذاری مرسوم gmp-propertychange منعکس می‌کنند.

هر شیء API نقشه‌سازی سه‌بعدی مجموعه‌ای از رویدادهای نام‌گذاری‌شده را نشان می‌دهد که برنامه شما می‌تواند شنوندگان رویداد را برای آن‌ها ثبت کند و منطق را هنگام وقوع آن رویدادها بااستفاده از تابع داخلی addEventListener() اجرا کند.

مثال زیر نشان می‌دهد که وقتی کاربر با نقشه تعامل برقرار می‌کند، کدام رویدادها راه‌اندازی می‌شوند:

مشاهده کد منبع نمونه کامل

TypeScript

const mapElement = document.querySelector('gmp-map-3d')!;

async function init() {
    // Import the needed libraries.
    await google.maps.importLibrary('maps3d');

    const events = [...document.querySelectorAll('div > p')].map(
        (i) => i.textContent
    );
    for (const event of events) {
        mapElement?.addEventListener(event, () => {
            const eventElement = document.querySelector(`#${event}`);
            eventElement?.classList.add('active');
            setTimeout(() => {
                eventElement?.classList.remove('active');
            }, 1000);
        });
    }
}

void init();

JavaScript

const mapElement = document.querySelector('gmp-map-3d');

async function init() {
    // Import the needed libraries.
    await google.maps.importLibrary('maps3d');

    const events = [...document.querySelectorAll('div > p')].map(
        (i) => i.textContent
    );
    for (const event of events) {
        mapElement?.addEventListener(event, () => {
            const eventElement = document.querySelector(`#${event}`);
            eventElement?.classList.add('active');
            setTimeout(() => {
                eventElement?.classList.remove('active');
            }, 1000);
        });
    }
}

void init();

CSS

html,
body {
    height: 100%;
    margin: 0;
    padding: 0;
}
body {
    display: flex;
    flex-direction: row;
}
gmp-map-3d {
    flex-grow: 1;
}
.myaside {
    flex-basis: 25%;
    font-family:
        Droid Sans Mono,
        monospace;
    font-size: 15px;
    padding: 2px;
}
.myaside > p.active {
    background-color: #9cf;
}

HTML

<html>
    <head>
        <title>3d-map-events</title>

        <link rel="stylesheet" type="text/css" href="./style.css" />
        <script type="module" src="./index.js"></script>
        <script>
            // prettier-ignore
            (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
                key: "GOOGLE_MAPS_API_KEY"
            });
        </script>
    </head>
    <body>
        <gmp-map-3d
            mode="hybrid"
            center="40.6338, 14.6028, 54.82"
            range="1000"
            tilt="65"></gmp-map-3d>
        <div class="myaside">
            <p id="gmp-centerchange">gmp-centerchange</p>
            <p id="gmp-click">gmp-click</p>
            <p id="gmp-headingchange">gmp-headingchange</p>
            <p id="gmp-rangechange">gmp-rangechange</p>
            <p id="gmp-rollchange">gmp-rollchange</p>
            <p id="gmp-steadychange">gmp-steadychange</p>
            <p id="gmp-tiltchange">gmp-tiltchange</p>
        </div>
    </body>
</html>