【发布时间】:2021-11-09 15:21:25
【问题描述】:
我正在使用react-map-gl,我正在地图中渲染标记。我也有一些悬停动画,到目前为止,动画只是 css,除非你点击一个标记(虽然这个问题并不重要)。
到目前为止,它可以按我的意愿工作,而且看起来很整洁。
但正如您所见,在地图中间,我有一组标记,它们彼此靠近。当我将其中一个悬停在背景中时,它看起来像这样:
如您所见,它不会将自己置于其他标记的顶部,这是所希望的。
这是悬停时的 CSS:
.pointer {
transform-origin: bottom center;
width: 40px;
position: absolute;
display: flex;
justify-content: center;
align-items: center;
bottom:0;
transform: translateX(-50%);
&:hover {
animation-name: bounce;
animation-duration: .5s;
animation-fill-mode: forwards;
z-index: 1000;
+ .text {
animation-name: bounce-text;
animation-duration: .4s;
animation-fill-mode: forwards;
animation-delay: .2s;
}
}
}
如您所见,我试图在悬停时将 z-index 提高到 1000,但它没有效果。可能是因为每个 <Marker/> 都是绝对定位的,并且可能有自己的 z-index 堆栈。
这是标记循环的 Javascript:
<ReactMapGl
ref={mapEl}
{...viewPort}
onViewportChange={(_viewport:any) => setViewport(_viewport)}
mapboxApiAccessToken={mapboxToken}
mapStyle="mapbox://styles/mapbox/satellite-v9"
style={{position:'relative', zIndex: '1'}}
>
{mapData.markerCategories.map((markerCategory, i) =>
<React.Fragment key={i}>
{markerCategory.markers.map((marker, i) => <Marker
latitude={marker.position[0]}
longitude={marker.position[1]}
key={i}
>
<Pointer viewPort={viewPort} marker={marker} markerCategory={markerCategory} setViewport={(viewPort:any) => setViewport(viewPort)}/>
</Marker>)}
</React.Fragment>
)}
</ReactMapGl>
<Pointer/> 组件基本上是每个带有 svg 和 CSS 的图形图标。
我找不到解决方案。所以我的问题是,如何通过 CSS(首选)或 JavaScript 在每次悬停时将标记升到顶部?
【问题讨论】:
标签: mapbox mapbox-gl-js react-map-gl