uni-app map组件customCallout动态样式问题
uni-app map组件customCallout动态样式问题
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win11 23H2 | HBuilderX |
## 示例代码:
```html
<map id="map" :longitude="params.longitude" :latitude="params.latitude" :markers="markers" [@callouttap](/user/callouttap)="callouttap" show-location>
<cover-view slot="callout">
<cover-view v-for="item in markers" :key="item.id">
<cover-view :marker-id="item.id" class="callout-item">
<cover-view class="item-container" :style="{ 'border-color': activeMarkId === item.id ? '#fe564d' : 'transparent' }"></cover-view>
</cover-view>
</cover-view>
</cover-view>
</map>
callouttap(e) {
this.activeMarkId = e.detail.markerId
}
操作步骤:
- 缩小地图至显示聚合点
- 放大地图至显示callout气泡
- 此时点击callout气泡, 动态样式失效, 重复1 2步骤生效
预期结果:
- 动态样式即时生效
实际结果:
- 动态样式失效
bug描述:
map组件中使用customCallout,通过callouttap事件动态切换callout气泡边框样式,在手机上地图缩小显示聚合点后,再次放大后本次点击事件可以正常触发,但设置的样式不会及时生效,会延迟到下次缩小放大重新显示callout气泡才生效
4 回复
使用微信小程序原生开发,验证一下是否有问题。
好像原生小程序也有这问题
在处理uni-app中的map
组件时,customCallout
(自定义标注)的动态样式调整可以通过绑定数据属性和使用样式绑定来实现。以下是一个简单的示例,展示了如何根据某些条件动态改变customCallout
的样式。
首先,确保你的页面或组件中已经引入了map
组件,并配置了基本的customCallout
。
示例代码
1. 在页面的<template>
部分:
<template>
<view>
<map
:latitude="latitude"
:longitude="longitude"
:markers="markers"
:show-location="true"
@tap="onMapTap"
style="width: 100%; height: 300px;"
>
<cover-view v-for="(marker, index) in markers" :key="index" :latitude="marker.latitude" :longitude="marker.longitude">
<cover-view
class="custom-callout"
:style="getCalloutStyle(marker.id)"
>
{{ marker.name }}
</cover-view>
</cover-view>
</map>
</view>
</template>
2. 在页面的<script>
部分:
<script>
export default {
data() {
return {
latitude: 39.9042,
longitude: 116.4074,
markers: [
{ id: 1, latitude: 39.905, longitude: 116.404, name: 'Marker 1' },
{ id: 2, latitude: 39.906, longitude: 116.405, name: 'Marker 2' },
],
};
},
methods: {
getCalloutStyle(id) {
let style = {
backgroundColor: 'rgba(255, 255, 255, 0.8)',
padding: '5px',
borderRadius: '5px',
color: '#000',
};
// 根据条件动态改变样式,例如根据id
if (id === 1) {
style.backgroundColor = 'rgba(255, 0, 0, 0.8)';
style.color = '#fff';
}
return style;
},
onMapTap(e) {
// 处理地图点击事件
console.log(e);
},
},
};
</script>
3. 在页面的<style>
部分:
<style scoped>
.custom-callout {
position: absolute;
white-space: nowrap;
transform: translate(-50%, -100%); /* 根据需要调整位置 */
}
</style>
说明
map
组件中,我们使用了cover-view
来覆盖在地图上,以实现自定义标注。getCalloutStyle
方法根据marker
的id
动态返回不同的样式。- 使用
:style
绑定动态样式,确保customCallout
的样式可以根据需要动态变化。 transform
属性用于调整标注的位置,你可能需要根据实际需求调整这个值。
通过这种方式,你可以根据具体业务逻辑动态调整customCallout
的样式,实现更灵活和丰富的地图标注效果。