【问题标题】:How to do a custom interactive "map" with an image with React?如何使用 React 使用图像制作自定义交互式“地图”?
【发布时间】:2020-05-18 08:19:01
【问题描述】:

我正在尝试使用 react 设置交互式“地图”,但我不知道如何设置。

我的交互式地图是一个地方的航拍图,我想在上面添加热点,用另一张图片显示该地方的预览。

之后,如果我单击预览,我想以实际大小显示图像,但我不知道该怎么做...

我使用 React

我愿意接受任何建议和建议!

谢谢大家

【问题讨论】:

    标签: reactjs image dictionary tooltip


    【解决方案1】:

    查看 Leaflet https://leafletjs.com/reference-1.6.0.html,它有 npm 包将它与 react https://react-leaflet.js.org/ 集成。

    Leaflet 允许您显示地图并创建基于 HTML 的自定义标记组件。这些标记可以监听用户交互事件,例如 onClick 和 onMouseOver。在捕获用户单击或悬停事件时,您可以在标记顶部呈现您需要的任何内容 - 例如您的图像,可能带有漂亮的标题、描述或您可能需要的任何其他内容。

    单击图像时,您可能希望在另一个视图中显示具有不同 CSS 样式的图像,以便可以全宽和全高显示它,或者您甚至可以设置指向原始图像 URL 的链接,这将更简单,但同时它会暂时将用户赶出您的网站。

    import React from 'react'
    import { divIcon } from 'leaflet'
    import { Marker } from 'react-leaflet'
    import { renderToStaticMarkup } from 'react-dom/server'
    import PropTypes from 'proptypes'
    import 'leaflet/dist/leaflet.css'
    
    const Index = props => {
        const iconMarkup = renderToStaticMarkup(
            <i
                className="dispatcher-marker fa fa-map-marker-alt"
                style={{ color: props.location.color }}
            />
        )
    
        const customMarkerIcon = divIcon({
            html: iconMarkup
        })
    
        return (
            <Marker
                position={[ props.location.lat, props.location.lng ]}
                icon={customMarkerIcon}
                opacity={props.opacity}
                onClick={() => props.handleClick(props.location.id, props.route)}
            />
        )
    }
    
    Index.propTypes = {
        handleClick: PropTypes.func,
        location: PropTypes.object.isRequired,
        route: PropTypes.object.isRequired,
        opacity: PropTypes.number.isRequired,
    }
    
    export default Index
    

    【讨论】:

    • 哦,我不知道可以将图像与传单一起使用,我将它与 OpenStreetMap 一起使用
    • 设置起来有点困难,但是您可以使用整个 HTML 标记来更改显示的内容而不是标记,我将为您发布一个代码示例来回答上面的答案 - 在示例中,我正在使用 i 元素来显示图标,因为我的用例要求我使用不同颜色、基于字体的图标
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多