Javascript 传单uunextjs-我的应用程序奇怪地显示标记和弹出窗口
编辑:我发现要将标记粘贴到位置上,我必须对iconSize和iconAnchor使用相同的值。但仍在寻找如何对齐图标上的弹出窗口。Javascript 传单uunextjs-我的应用程序奇怪地显示标记和弹出窗口,javascript,reactjs,leaflet,next.js,Javascript,Reactjs,Leaflet,Next.js,编辑:我发现要将标记粘贴到位置上,我必须对iconSize和iconAnchor使用相同的值。但仍在寻找如何对齐图标上的弹出窗口。 edit2:edit2更像是一个提示,我认为事实上我的组件呈现得很好,但由于某些原因,当页面计算弹出窗口的位置时,会出现一些延迟,将其置于错误的位置。为了证明这一点,如果我点击图标重新呈现弹出窗口,它会显示在一个相关的位置,只是稍微调整一下。因此,解决方案可能是找到一种方法来重新调整弹出显示。我确认这一提示,使用设置超时来设置弹出解决问题,即使它在黑客方式上,它的工
edit2:edit2更像是一个提示,我认为事实上我的组件呈现得很好,但由于某些原因,当页面计算弹出窗口的位置时,会出现一些延迟,将其置于错误的位置。为了证明这一点,如果我点击图标重新呈现弹出窗口,它会显示在一个相关的位置,只是稍微调整一下。因此,解决方案可能是找到一种方法来重新调整弹出显示。我确认这一提示,使用设置超时来设置弹出解决问题,即使它在黑客方式上,它的工作原理也是如此 我正试图用NextJS制作一张传单地图。 目前,我的应用程序在lng和lat中的位置确定外显示标记和弹出窗口。 我有点困惑,因为只启动CDN,而不启动本地文件。但是,当我把化妆品放在我的应用程序上时,系统就坏了,我的弹出窗口靠近大海,标记器离开去了另一个城市,发生了什么事?我不知道发生了什么事 一个有趣的元素是,当我缩放时,我的图标会靠近这个位置。当我缩放时,图标似乎离位置更远,就像元素没有粘在位置上一样 这是我的沙盒: 下面是一张情况照片: 下面是我的react.js代码:
import React, {Component, Fragment} from "react";
import L from "leaflet"
import "~/lib/leaflet/leaflet.css"
import "~/lib/leaflet/leaflet"
import styled from "styled-components"
import Head from 'next/head'
const Wrapper= styled.div`
width:${props => props.width};
height:${props => props.height};
`;
export default class Map extends Component{
componentDidMount(){
this.map= L.map("map", {
center:[37.8349,-122.1297],
zoom:12,
zoomControl:true
})
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
})
.addTo(this.map)
var placeholder = L.icon({
iconUrl: "/static/assets/icons/placeholder.svg",
iconSize: [37, 37],
iconAnchor: [37.8349, -122.1297], // [37,37] to stick icon to location
relative to the iconAnchor
});
var marker = L.marker([37.8349, -122.1297],{icon: placeholder}).addTo(this.map);
marker.bindPopup("<b>Hello world!</b><br>I am a popup.").openPopup();
}
render(){
// console.log("this.map.invalidateSize: ", this.map)
return (
<Fragment>
<Head>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.4.0/dist/leaflet.css"
integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA=="
crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"
integrity="sha512-QVftwZFqvtRNi0ZyCtsznlKSWOStnDORoefr1enyq5mVL4tmKB3S/EnC3rRJcxCPavG10IcrVGSmPh6Qw5lwrg=="
crossorigin=""></script>
</Head>
<Wrapper width="100vw" height="80vh" id="map"/>
{/* <style jsx global>{lStyle}</style> */}
</Fragment>
)
}
}
import React,{Component,Fragment}来自“React”;
从“传单”中输入L
导入“~/lib/传单/传单.css”
导入“~/lib/传单/传单”
从“样式化组件”导入样式化
从“下一个/头”导入头
const Wrapper=styled.div`
宽度:${props=>props.width};
高度:${props=>props.height};
`;
导出默认类映射扩展组件{
componentDidMount(){
this.map=L.map(“map”,{
中间:[37.8349,-122.1297],
缩放:12,
动物控制:正确
})
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'{
maxZoom:19,
属性:“©;贡献者”
})
.addTo(此.map)
变量占位符=L.icon({
iconUrl:“/static/assets/icons/placeholder.svg”,
iconSize:[37,37],
iconAnchor:[37.8349,-122.1297],//[37,37]将图标粘贴到位置
相对于iconAnchor
});
var marker=L.marker([37.8349,-122.1297],{icon:placeholder}).addTo(this.map);
marker.bindPopup(“你好,世界!
我是一个弹出窗口。”).openPopup();
}
render(){
//log(“this.map.invalidateSize:”,this.map)
返回(
{/*{lStyle}*/}
)
}
}
任何暗示都很好,
谢谢我发现要将标记粘贴到位置上,我必须对iconSize和iconAnchor使用相同的值。但是仍然在寻找如何在iconedit2上对齐弹出窗口:edit2更像是一个提示,我认为事实上我的组件呈现得很好,但由于某些原因,当页面计算弹出窗口的位置时,存在一些延迟,将其置于错误的位置。解决方案可能是找到一种方法来重新调整弹出显示。我确认edit2的提示,使用setTimeout来解决问题,即使它是在hackway上,它的工作原理也是如此。我发现,要将标记粘贴到位置上,我必须对iconSize和iconAnchor使用相同的值。但是仍然在寻找如何在iconedit2上对齐弹出窗口:edit2更像是一个提示,我认为事实上我的组件呈现得很好,但由于某些原因,当页面计算弹出窗口的位置时,存在一些延迟,将其置于错误的位置。解决方案可能是找到一种方法来重新显示弹出窗口。我确认edit2的提示,使用setTimeout来解决问题,即使它是在hackway上,它的工作原理也是如此。