تعامل با نقشه

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

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

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

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

  • رویدادهای تعامل کاربر (مثل کلیک‌های موشواره) از نمای درگاه نقشه سه‌بعدی به کد شما منتقل می‌شود. این رویدادها به شما امکان می‌دهند به کنش‌های مستقیم کاربر در محیط نقشه سه‌بعدی پاسخ دهید. مشاهده نمونه.
  • اعلان‌های تغییر وضعیت، به‌روزرسانی‌های مدل‌های داده نقشه سه‌بعدی زیربنایی و وضعیت پرداز زدن را بااستفاده از طرح نامگذاری 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>