Javascript 从JS中的函数发送变量
我有一个带有地图的JS脚本,它运行良好:Javascript 从JS中的函数发送变量,javascript,jquery,leaflet,openstreetmap,Javascript,Jquery,Leaflet,Openstreetmap,我有一个带有地图的JS脚本,它运行良好: var-lat=0; var lng=0; 函数onLocationFound(e){ var半径=e.精度/2; lat=e.latlng.lat; 液化天然气=e.latlng.lng; 控制台日志(如latlng); L.marker(e.latlng).addTo(map).bindPopup(“Tutaj jesteś!!!”).openPopup(); L.圆(e.板条,半径)。添加到(地图); } 函数onLocationError(e){
var-lat=0;
var lng=0;
函数onLocationFound(e){
var半径=e.精度/2;
lat=e.latlng.lat;
液化天然气=e.latlng.lng;
控制台日志(如latlng);
L.marker(e.latlng).addTo(map).bindPopup(“Tutaj jesteś!!!”).openPopup();
L.圆(e.板条,半径)。添加到(地图);
}
函数onLocationError(e){
//警报(e.message);
}
var map=L.map('mapdiv'{
是的,
fadeAnimation:错误
}).setView([54.35070881441067,18.641191756395074],15);
L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png'{
属性:“©;参与者”,
maxZoom:30,
动物控制:对,
特雷蒂娜:是的
}).addTo(地图);
地图上('locationfound',onLocationFound);
map.on('locationerror',onLocationError);
定位({
setView:对,
最大缩放:16
});
让myFilter=['灰度:100%'];
让myTileLayer=L.tileLayer.colorFilter('https://maps.wikimedia.org/osm-intl/{z} /{x}/{y}.png'{
归属:'',
过滤器:myFilter,
}).addTo(地图);
/*
lc=L.control.locate({
字符串:{
标题:“告诉我我在哪里,哟!”
}
}).addTo(地图);
*/
var LeafIcon=L.Icon.extend({
选项:{
shadowUrl:'leaf shadow.png',
iconSize:[38,95],
阴影大小:[50,64],
iconAnchor:[22,94],
暗影主播:[4,62],
popupAnchor:[-3,-76]
}
});
var greenIcon=新叶图标({
iconUrl:'叶绿色.png'
}),
redIcon=新叶图标({
iconUrl:'叶红.png'
}),
橙色图标=新的叶子图标({
iconUrl:'leaf orange.png'
});
L.icon=功能(选项){
返回新的L.图标(选项);
};
L.标记([54.45070881441067,18.541191756395074]{
图标:绿色图标
}).addTo(map).bindPopup('yyyyyy.
易于自定义');
L.标记([54.35070881441367,18.641191756395774]{
图标:redIcon
}).addTo(map).bindpoppup('xxxxxxx.
易于自定义').openPopup();
L.标记([54.58273849989086,18.37322638357547]{
图标:绿色图标
}).addTo(map).bindPopup('yyyyyy.
易于自定义');
L.EditControl=L.Control.extend({
选项:{
位置:'左上',
回调:null,
种类:'',
html:'
},
onAdd:函数(映射){
var container=L.DomUtil.create('div','传单控件传单栏'),
link=L.DomUtil.create('a','',容器);
link.href='#';
link.title='createanew'+this.options.kind;
link.innerHTML=this.options.html;
打开(链接'click',L.DomEvent.stop)。打开(链接'click',function()){
window.LAYER=this.options.callback.call(map.editTools);
},这个);
返回容器;
}
});
var循环=L循环([lat,lng]{
半径:1000
}).addTo(地图);
circle.enableEdit();
on('dblclick',L.DomEvent.stop.)。on('dblclick',circle.toggleEdit);
//圆.on('可编辑:顶点:拖动',函数(e){
地图打开('可编辑:绘图:移动',功能(e){
console.log(circle.getLatLng())
console.log(circle.getRadius());
});
在onLocationFound()
函数中,我为lat
和lng
变量设置了值。我想在此代码中使用这些变量:
var circle = L.circle([lat, lng], {
radius: 1000
}).addTo(map);
但是它不起作用。我在控制台中没有错误。我如何修复此问题?问题是因为
onLocationFound()
函数仅在地图上触发locationfound
事件时调用,但在此之前您尝试使用lat
和lng
值,因此这些值是未定义的
要解决此问题,请移动onLocationFound()
函数内的var循环=…
行:
function onLocationFound(e) {
var radius = e.accuracy / 2;
lat = e.latlng.lat;
lng = e.latlng.lng;
console.log(e.latlng);
L.marker(e.latlng).addTo(map).bindPopup("Tutaj jesteś!!!").openPopup();
L.circle(e.latlng, radius).addTo(map);
var circle = L.circle([lat, lng], {
radius: 1000
}).addTo(map);
}
从本例中可以看出,您的代码已经在这一行中执行了类似的操作:
L.circle(e.latlng, radius).addTo(map);
您试图使用的代码中的差异只是您为圆定义的半径
另外请注意,您还可以删除这些变量的全局定义,因为应尽可能避免使用全局变量。调用函数
onLocationFound
可能根本没有运行。我发现onLocationError
回调函数的内容被注释掉。如果您取消注释(或添加一个控制台。error()
)在那里,您可能会得到更多信息。谢谢。我在这里添加了您的代码:我有错误:地理位置错误:位置不可用。该页面对我来说很好。听起来您好像没有从浏览器权限启用地理位置访问。