Javascript 在jQuery插件中向Google地图添加标记
我在创建一个函数时遇到了麻烦,该函数在实例化后会将标记添加到我的谷歌地图中。以下是我的整个jQuery插件:Javascript 在jQuery插件中向Google地图添加标记,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我在创建一个函数时遇到了麻烦,该函数在实例化后会将标记添加到我的谷歌地图中。以下是我的整个jQuery插件: function ($) { $.fn.eqpMap = function (options) { var mapContainer = this; $.fn.map.container = this; $.fn.map.map = null; $.fn.map.defaults = { adr1: null, ad
function ($) {
$.fn.eqpMap = function (options) {
var mapContainer = this;
$.fn.map.container = this;
$.fn.map.map = null;
$.fn.map.defaults = {
adr1: null,
adr2: null,
adr3: null,
cp: null,
ville: null,
geocodeAPI: "gouv",
coordinates: {
lat: null,
lon: null
},
pays: "France",
zoom: 15,
osm: {
layer: "http://{s}.tile.osm.org/{z}/{x}/{y}.png",
options: {
fullscreenControl: true
}
},
google: {
options: {
googleKey: null,
streetViewControl: false,
mapTypeControl: false
}
}
};
var opts = $.extend(true, {}, $.fn.map.defaults, options);
function displayMap(location) { //location {lat: 1, lon: 1}
if (opts.geocodeAPI == "google") {
opts.google.options.center = location;
$.fn.map.map = new google.maps.Map(mapContainer[0], opts.google.options);
var marker = new google.maps.Marker({ position: opts.google.options.center, map: $.fn.map.map });
} else {
//Récupère l'attribut id de l'element
let idContainer = $(mapContainer).attr('id');
opts.osm.options.center = location;
if (typeof L.Control.Fullscreen == 'undefined') {
delete opts.osm.options.fullscreenControl;
}
$.fn.map.map = L.map(idContainer, opts.osm.options);
L.tileLayer(opts.osm.layer, {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo($.fn.map.map);
$.fn.map.map.attributionControl.setPrefix(false);
var marker = new L.marker(opts.osm.options.center, {});
$.fn.map.map.addLayer(marker);
}
}
return this;
};
$.fn.eqpMap.addMarker = function (marker) {
var markers = null;
if ($.fn.map.opts.geocodeAPI !== "google") {
markers = new L.marker(marker, {});
window.addEventListener('load', function () {
console.log('osm');
$.fn.map.map.addLayer(markers);
})
} else {
markers = {lat: marker.lat, lng: marker.lon};
window.addEventListener('load', function () {
console.log('google');
console.log(markers);
var markerGoogle = new google.maps.Marker({ position: markers, map: $.fn.map.map });
markerGoogle.setMap($.fn.map.map);
})
}
}
}(jQuery));
函数($){
$.fn.eqpMap=函数(选项){
var mapContainer=this;
$.fn.map.container=这个;
$.fn.map.map=null;
$.fn.map.defaults={
adr1:null,
adr2:null,
adr3:null,
cp:null,
维尔:空,
geocodeAPI:“gouv”,
坐标:{
lat:null,
lon:null
},
支付:“法国”,
缩放:15,
osm:{
层:“http://{s}.tile.osm.org/{z}/{x}/{y}.png”,
选项:{
fullscreenControl:true
}
},
谷歌:{
选项:{
googleKey:null,
街景控制:错误,
mapTypeControl:false
}
}
};
var opts=$.extend(true,{},$.fn.map.defaults,options);
函数显示映射(位置){//location{lat:1,lon:1}
如果(opts.geocodeAPI==“谷歌”){
opts.google.options.center=位置;
$.fn.map.map=新的google.maps.map(mapContainer[0],opts.google.options);
var marker=new google.maps.marker({position:opts.google.options.center,map:$.fn.map.map});
}否则{
//元素属性
让idContainer=$(mapContainer.attr('id');
opts.osm.options.center=位置;
if(typeof L.Control.Fullscreen==“未定义”){
删除opts.osm.options.fullscreenControl;
}
$.fn.map.map=L.map(idContainer,opts.osm.options);
L.tileLayer(选择osm.layer{
属性:“©;贡献者”
}).addTo($.fn.map.map);
$.fn.map.map.AttributeControl.setPrefix(false);
var marker=newl.marker(opts.osm.options.center,{});
$.fn.map.map.addLayer(标记);
}
}
归还这个;
};
$.fn.eqpMap.addMarker=函数(标记){
var=null;
如果($.fn.map.opts.geocodeAPI!=“谷歌”){
markers=新的L.marker(marker,{});
window.addEventListener('load',函数(){
console.log('osm');
$.fn.map.map.addLayer(标记);
})
}否则{
markers={lat:marker.lat,lng:marker.lon};
window.addEventListener('load',函数(){
log('google');
控制台日志(标记);
var markerGoogle=new google.maps.Marker({position:markers,map:$.fn.map.map});
markerGoogle.setMap($.fn.map.map);
})
}
}
}(jQuery));
每次我尝试在我的
addMarker
方法中添加一个标记时,它都不会添加,因为它找不到$.fn.map.map
。我还试图通过window.google.maps.map
访问地图,但它似乎不起作用,所有这些都不会给我带来任何错误来帮助。如何将地图附加到DOM?@gmazoni我不太明白,但地图是使用google对象创建的(我可能错了):$.fn.map.map=new google.maps.map(mapContainer[0],opts.google.options);我试图用你的$.fn.map.map解除对上下文的理解,可能是因为addMarker试图添加到一个不正确的映射initialized@gmazoni这就是为什么我的addMarker方法中有一个eventListener,因为我不想等待页面加载和映射初始化。你保证“加载”会等待映射初始化吗?你能用回叫吗?