not*_*ing 7 leaflet reactjs react-leaflet
React-leaflet 很好地提供了将内容放入Popup标记中的能力。
例如在我的例子中:
<Marker position={[item.lat, item.lng]} key={item.machineid}>
<Popup maxWidth={720}>
<ItemGrid machineid={item.machineid}
username={this.props.username}/>
</Popup>
</Marker>
Run Code Online (Sandbox Code Playgroud)
但是,如果此内容太大,则可能会很笨拙,尤其是在移动设备上。我想在单击标记时激活(引导程序)模态界面。有没有办法在反应传单中做到这一点?
Sel*_*rim 16
更新: 事件行为#
使用 Marker 组件内的 eventHandlers 侦听器函数:
<Marker
position={[50.5, 30.5]}
eventHandlers={{
click: (e) => {
console.log('marker clicked', e)
},
}}
/>
Run Code Online (Sandbox Code Playgroud)
我发现了一种黑客方法,可以通过点击标记来执行任意操作。(1)保留弹出窗口,但让它的内容做任何你喜欢的事情(例如默认打开模式)和(2)用CSS隐藏弹出窗口的容器div。
就我而言,它看起来像这样:地图视图,保持不变:
<Marker position={[item.lat, item.lng]} key={item.machineid}>
<Popup maxWidth={720}>
<ItemGrid machineid={item.machineid}
username={this.props.username}/>
</Popup>
</Marker>
Run Code Online (Sandbox Code Playgroud)
然后,之前在弹出窗口中的 ItemGrid 更改为包含模式。(这里我们使用reactstrap组件并将模态设置为true组件安装时的模式。):
class ItemGrid extends Component {
constructor(props){
super(props);
this.state = {modal:false}
this.toggle = this.toggle.bind(this);
}
toggle() {
this.setState({
modal: !this.state.modal
});
}
componentDidMount() {
this.setState({modal:true})
}
render() {
return (
<div>
<Modal isOpen={this.state.modal} toggle={this.toggle} className={this.props.className}>
<ModalHeader toggle={this.toggle}>Modal Header</ModalHeader>
<ModalBody>
{ContentThatWasPreviouslyInPopup}
</ModalBody>
</Modal>
</div>
Run Code Online (Sandbox Code Playgroud)
最后在传单 CSS 中:
.leaflet-container a.leaflet-popup-close-button {
position: absolute;
top: 0;
right: 0;
padding: 8px 8px 0 0;
text-align: center;
width: 0px;
height: 0px;
font: 0px/0px Tahoma, Verdana, sans-serif; //DANGEROUS HACK
color: #c3c3c3;
text-decoration: none;
font-weight: bold;
background: transparent;
}
.leaflet-popup-content-wrapper {
padding: 1px;
text-align: left;
border-radius: 12px;
width: 0px // DANGEROUS HACK
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9335 次 |
| 最近记录: |