Angularjs 标记单击事件在移动设备中不起作用
我已经为附近的美食区创建了谷歌地图。在此中,标记将显示在浏览器中,可单击并提供信息窗口数据。但移动设备也会显示相同的标记,当我单击标记时(轻触标记)信息窗口数据未显示。我尝试了这么多论坛,更改了很多代码,并进行了调试,但找不到解决方案 foodFactory.jsAngularjs 标记单击事件在移动设备中不起作用,angularjs,google-maps,google-maps-api-3,ionic,infowindow,Angularjs,Google Maps,Google Maps Api 3,Ionic,Infowindow,我已经为附近的美食区创建了谷歌地图。在此中,标记将显示在浏览器中,可单击并提供信息窗口数据。但移动设备也会显示相同的标记,当我单击标记时(轻触标记)信息窗口数据未显示。我尝试了这么多论坛,更改了很多代码,并进行了调试,但找不到解决方案 foodFactory.js var foodModule = angular.module('foodModule', []); foodModule.factory("foodFactory", ['$rootScope', '$window','foodSe
var foodModule = angular.module('foodModule', []);
foodModule.factory("foodFactory", ['$rootScope', '$window','foodServices', 'localStorageService', '$state', '$ionicLoading','$stateParams',
function($rootScope, $window, foodServices, localStorageService, $state, $ionicLoading, $stateParams, $cordovaGeolocation ) {
var foodCourtmap = {};
var marker = {};
var directionsDisplay = new google.maps.DirectionsRenderer({'draggable': true });
var directionsService = new google.maps.DirectionsService();
foodCourtmap.centerOnMe = function() {
initialize();
};
//intialze the google map it's show current location.
function initialize() {
var infowindow = new google.maps.InfoWindow();
navigator.geolocation.getCurrentPosition(function(pos) {
foodCourtmap.latitude = pos.coords.latitude;
foodCourtmap.longitude = pos.coords.longitude;
var site = new google.maps.LatLng( foodCourtmap.latitude, foodCourtmap.longitude);
var currentmapOptions = {
center: site,
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
//current location address based on Latitude and Longitude
var lat = parseFloat(foodCourtmap.latitude);
var lng = parseFloat(foodCourtmap.longitude);
var latlng = new google.maps.LatLng(lat, lng);
var geocoder = new google.maps.Geocoder();
geocoder.geocode({
'latLng': latlng
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
var contentString = "Location: " + results[1].formatted_address;
var marker = new google.maps.Marker({
position: latlng,
map: map,
title: 'Current Location'
});
google.maps.event.addListener(marker, 'click', function(event) {
infowindow.setContent(contentString);
infowindow.open(map, marker);
});
}
}
});
var map = new google.maps.Map(document.getElementById("food_map_canvas"), currentmapOptions);
// Places
var request = {
location:site,
radius: '5000',
name: ['restaurent']
};
var service = new google.maps.places.PlacesService(map);
service.search( request, callback );
function callback(results, status)
{
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var place = results[i];
createMarker(results[i]);
}
}
else
{
alert('No results found');
}
}
var image = new google.maps.MarkerImage('img/Restaurant.png');
function createMarker(place) {
var placeLoc = place.geometry.location;
var marker = new google.maps.Marker({
map: map,
title: place.name+","+place.vicinity,
position: place.geometry.location,
icon:image
});
var contentString = place.name+","+place.vicinity;
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(contentString);
infowindow.open(map, marker);
});
}
foodCourtmap.map = map;
});
};
$rootScope.createFoodCourt = function() {
foodCourtmap.centerOnMe();
}
return {
init: function() {
foodCourtmap.centerOnMe();
return foodCourtmap;
}
};
}
]);
var foodModule=angular.module('foodModule',[]);
工厂(“foodFactory”[“$rootScope”、“$window”、“foodServices”、“localStorageService”、“$state”、“$ionicLoading”、“$stateParams”,
函数($rootScope、$window、foodServices、localStorageService、$state、$ionicLoading、$stateParams、$cordovaGeolocation){
var foodCourtmap={};
var标记={};
var directionsDisplay=new google.maps.DirectionsRenderer({'draggable':true});
var directionsService=new google.maps.directionsService();
foodCourtmap.centerOnMe=函数(){
初始化();
};
//初始化谷歌地图,显示当前位置。
函数初始化(){
var infowindow=new google.maps.infowindow();
navigator.geolocation.getCurrentPosition(函数(pos)){
foodCourtmap.latitude=pos.coords.latitude;
foodCourtmap.longitude=pos.coords.longitude;
var site=new google.maps.LatLng(foodCourtmap.latitude,foodCourtmap.longitude);
var currentmapOptions={
中心:现场,,
缩放:10,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
//基于纬度和经度的当前位置地址
var lat=parseFloat(foodCourtmap.latitude);
var lng=parseFloat(foodCourtmap.longitude);
var latlng=新的google.maps.latlng(lat,lng);
var geocoder=new google.maps.geocoder();
地理编码({
“latLng”:latLng
},功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
如果(结果[1]){
var contentString=“Location:”+结果[1]。格式化的\u地址;
var marker=new google.maps.marker({
位置:latlng,
地图:地图,
标题:“当前位置”
});
google.maps.event.addListener(标记,'click',函数(事件){
setContent(contentString);
信息窗口。打开(地图、标记);
});
}
}
});
var map=new google.maps.map(document.getElementById(“食品地图画布”),currentmapOptions);
//地点
var请求={
地点:地点:,
半径:'5000',
名称:[“餐厅”]
};
var service=newgoogle.maps.places.PlacesService(地图);
服务搜索(请求、回调);
函数回调(结果、状态)
{
if(status==google.maps.places.PlacesServiceStatus.OK){
对于(var i=0;i
food.html
<ion-view>
<ion-content scroll="false">
<div id="food_map_canvas" data-tap-disabled="true" style="float:right;width:100%; height:100%"></div>
</ion-content>
</ion-view>
因此,请任何人在这些方面提供帮助。我也有同样的问题。问题是当我们触摸手机屏幕时,没有触发“点击”事件。所以我改成了“mousedown”活动。现在我可以添加标记了我也遇到了同样的问题。问题是当我们触摸手机屏幕时,没有触发“点击”事件。所以我改成了“mousedown”活动。现在我可以添加标记了,
mousedown
事件是一个改进,但是,在iOS上,事件仍然间歇性地为我触发。经过更多的调查,我发现了一个解决方案,除了使用mousedown
事件之外,在创建标记时还设置了optimized:false
,可以100%工作
例如
mousedown事件是一种改进,但是,在iOS上,事件仍然间歇性地为我触发。经过进一步调查
var newMarker = new google.maps.Marker({
position: latLong,
map: map,
icon: 'https://maps.google.com/mapfiles/ms/icons/green-dot.png',
optimized: false
});