根据百度地图官方的解释,手机H5页面可以监听到以下四个事件:touchstart、touchmove、touchend、longpress。如果在地图上监听点击事件,则移动端不会执行该事件中的代码。之前做请求的时候,监听的是地图的touchend事件。没想到我拖地图的时候,touchend里面的代码也被执行了。所以需要像zepto一样模拟一个tap事件来解决这个问题。我的代码是:functioninitMap(baseData){varmp=newBMap.Map('map');varpoint=newBMap.Point(baseData.data.gardenLongitude,baseData.data.gardenLatitude);mp.centerAndZoom(point,15);//保存触摸对象信息varobj={};mp.addEventListener('touchstart',function(e){obj.e=e.changedTouches?e.changedTouches[0]:e;obj.target=e.target;obj.time=Date.now();obj.X=obj.e.pageX;obj.Y=obj.e.pageY;});mp.addEventListener('touchend',function(e){obj.e=e.changedTouches?e.changedTouches[0]:e;if(obj.target===e.target&&//大于750,可以被视为长按((Date.now()-obj.time)<750)&&//根据勾股定理判断,如果touchstart到touchend的点小于15,就可以认为地图有被点击(Math.sqrt(Math.pow(obj.X-obj.e.pageX,2)+Math.pow(obj.Y-obj.e.pageY,2))<15)){//地图被点击,做一些事情doSomething();}});}
