问题描述
我正在将Vue.js用于我的Web应用程序。我创建了一个自定义html popup元素,并尝试将其添加到UI(在示例中可以看到的房子图标顶部),但是我无法使其显示在单击的坐标上。我知道可以通过添加到视图UI并将位置设置为“手动”来做到这一点,但是找不到任何设置特定坐标的示例。预先感谢您的帮助。
this.viewt.ui.add(document.getElementsByClassName("popup")[0],{position: "manual"});
模板代码
<template>
<div class="popup" v-if="openPopUp" ref="popupwindow">
<article class="house-card" id="popup-test">
<div class="img-wrapper">
<img class="post-image"
src="https://www.comitatoaurora.com/wp-content/uploads/2019/11/contemporary-exterior.jpg"/>
<div class="middle">
€{{ Math.round(this.object.Price) }}
</div>
</div>
<div class="article-details" :key="this.object.Address" @mouSEOver="hover = true"
@mouseleave="hover = false">
<div class="post-category">
<div>
{{
this.object.Address.replace(this.object.Address.substring(this.object.Address.indexOf(','),this.object.Address.indexOf(',') + 9),',')
}}<span
style="margin: 0.3vw"></span>
</div>
</div>
<div class="percentage-circle">
<div class="progress-single">
<v-progress-circular
color="rgba(81,87,102,0.99)"
:size="30"
:width="2"
:value="this.object.Risk"
>{{ this.object.Risk }}
</v-progress-circular>
<div class="progress-text">
<p>Risk</p>
<p>score</p>
</div>
</div>
<div class="progress-single">
<v-progress-circular
color="rgba(81,0.99)"
:size="30"
:width="2"
:value="this.object.Gross_rental_yield*10"
>{{
Math.round((this.object.Gross_rental_yield +
Number.EPSILON) * 10) / 10
}}
</v-progress-circular>
<div class="progress-text">
<p>Gross</p>
<p>Yield</p>
</div>
</div>
<div class="progress-single">
<v-progress-circular
color="rgba(81,0.99)"
:size="30"
:width="2"
:value="this.object.Net_yield*100/5"
>{{ Math.round((this.object.Net_yield + Number.EPSILON) * 10) / 10 }}
</v-progress-circular>
<div class="progress-text">
<p>Net</p>
<p>Yield</p>
</div>
</div>
</div>
<div class="percentage-circle metrics-level">
<div class="bottom-metric"><img height="12vh"
src="../../public/img/year.svg"
alt="year"/><b>{{
this.object.ConstructionYear
}} </b></div>
<div class="headerDivider"></div>
<div class="bottom-metric"><img height="12vh"
src="../../public/img/rent.svg"
alt="rent"/><b>{{ this.object.Estimated_Rent }}€/mo</b>
</div>
<div class="headerDivider"></div>
<div class="bottom-metric" style="margin-left: 0.15vw !important;"><img height="12vh"
src="../../public/img/square.svg"
alt="square"/>
<b>{{ this.object.Sqm }}m<sup>2</sup></b></div>
</div>
<transition name="fadeo">
<div v-if="hover" class="overlay">
<router-link :to="{name:'card',params: { id: this.id }}">
<div class="overlay-text"> View Asset</div>
</router-link>
</div>
</transition>
</div>
</article>
</div>
</template>
解决方法
弹出窗口有两种方法可以打开所选功能,
- 例如选择一项功能时自动
- 手动使用弹出式
open
方法。
如果选择1),则必须为图层或图形设置PopupTemplate。您可以通过两种方式为PopupTemplate
定义自定义内容,例如使用功能或承诺。
ArcGIS API - PopupTemplate content
如果您选择2),则需要
- 如果视图(自动打开为false),则禁用默认行为,
- 收听点击事件,
- 在每个点击事件上,以点击事件的地图点作为位置,手动打开弹出窗口(如果已选择功能)
view.popup.autoOpenEnabled = false; // <- disable view popup auto open
view.on("click",function (event) { // <- listen to view click event
if (event.button === 0) { // <- check that was left button or touch
view.popup.open({ // <- open popup
location: event.mapPoint,// <- use map point of the click event
fetchFeatures: true // <- fetch the selected features (if any)
});
}
});