腾讯地图自定义重写drawingControl
参考api:
http://lbs.qq.com/javascript_v2/case-run.html#control-custom1
http://lbs.qq.com/javascript_v2/case-run.html#overlay-custom
http://lbs.qq.com/javascript_v2/doc/drawingmanager.html
我们使用腾讯地图的绘制功能时,发现它的控件没有提供样式。感觉比较小。
如果想要修改样式只能自己重新写一个控件,听起来很复杂,其实写出来就比较简单了。下面是我自己写的一个,大家可以做自己相应的修改。
控件代码如下,新建为html可用:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>腾讯地图</title>
<style>
html,
body {
height: 100%;
margin: 0px;
padding: 0px
}
#container {
width: 100%;
height: 100%
}
</style>
<script src="http://map.qq.com/api/js?v=2.exp"></script>
</head>
<body>
<div id="container"></div>
<script>
var map = new qq.maps.Map(document.getElementById("container"));
var controlStyleLeft = "padding:16px;border-style: solid; border-width: 2px;border-right-width:1px;border-color:#86acf2;background:#ffffff";
var controlStyleMid = "padding:16px;border-style: solid; border-width: 2px;border-right-width:1px;border-left-width:1px;border-color:#86acf2;background:#ffffff";
var controlStyleRight = "padding:16px;border-style: solid; border-width: 2px;border-left-width:1px;border-color:#86acf2;background:#ffffff";
var circleOneControl = document.createElement("div");
circleOneControl.style.cssText = controlStyleLeft;
circleOneControl.innerHTML = "一公里圆";
circleOneControl.index = 1; //设置在当前布局中的顺序
circleOneControl.title = "定点画一公里圆";
circleOneControl.style.cursor="pointer";
var circleTwoControl = document.createElement("div");
circleTwoControl.style.cssText = controlStyleMid;
circleTwoControl.innerHTML = "二公里圆";
circleTwoControl.index = 2;
circleTwoControl.title = "定点画二公里圆";
circleTwoControl.style.cursor="pointer";
var circleThressControl = document.createElement("div");
circleThressControl.style.cssText = controlStyleMid;
circleThressControl.innerHTML = "三公里圆";
circleThressControl.index = 3;
circleThressControl.title = "定点画三公里圆";
circleThressControl.style.cursor="pointer";
var circleAnyControl = document.createElement("div");
circleAnyControl.style.cssText = controlStyleMid;;
circleAnyControl.innerHTML = "任意圆";
circleAnyControl.index = 4;
circleAnyControl.title = "画任意大小的圆";
circleAnyControl.style.cursor="pointer";
var rectangleControl = document.createElement("div");
rectangleControl.style.cssText = controlStyleMid;;
rectangleControl.innerHTML = "矩形";
rectangleControl.index = 5;
rectangleControl.title = "画任意大小的矩形";
rectangleControl.style.cursor="pointer";
var polygonControl = document.createElement("div");
polygonControl.style.cssText = controlStyleRight;
polygonControl.innerHTML = "多边形";
polygonControl.index = 6;
polygonControl.title = "画任意形状的多边形";
polygonControl.style.cursor="pointer";
//只要设置了index,插入顺序就可以是乱序的了
map.controls[qq.maps.ControlPosition.TOP_CENTER].push(circleOneControl);
map.controls[qq.maps.ControlPosition.TOP_CENTER].push(circleTwoControl);
map.controls[qq.maps.ControlPosition.TOP_CENTER].push(circleThressControl);
map.controls[qq.maps.ControlPosition.TOP_CENTER].push(circleAnyControl);
map.controls[qq.maps.ControlPosition.TOP_CENTER].push(rectangleControl);
map.controls[qq.maps.ControlPosition.TOP_CENTER].push(polygonControl);
qq.maps.event.addListener(circleOneControl, 'click', function() {
cleanControlcolor();
setControlcolor(circleOneControl);
});
qq.maps.event.addListener(circleTwoControl, 'click', function() {
cleanControlcolor();
setControlcolor(circleTwoControl);
});
qq.maps.event.addListener(circleThressControl, 'click', function() {
cleanControlcolor();
setControlcolor(circleThressControl);
});
qq.maps.event.addListener(circleAnyControl, 'click', function() {
cleanControlcolor();
setControlcolor(circleAnyControl);
});
qq.maps.event.addListener(rectangleControl, 'click', function() {
cleanControlcolor();
setControlcolor(rectangleControl);
});
qq.maps.event.addListener(polygonControl, 'click', function() {
cleanControlcolor();
setControlcolor(polygonControl);
});
function cleanControlcolor() {
var oldColor="#ffffff";
circleOneControl.style.background=oldColor;
circleTwoControl.style.background=oldColor;
circleThressControl.style.background=oldColor;
circleAnyControl.style.background=oldColor;
rectangleControl.style.background=oldColor;
polygonControl.style.background=oldColor;
}
function setControlcolor(control) {
var newColor="#86acf2";
control.style.background=newColor;
}
</script>
</body>
</html>
最后我们把控件和绘图的功能绑定起来
修改引用js
<script src="http://map.qq.com/api/js?v=2.exp"></script>
修改为:
<script charset="utf-8" src="http://map.qq.com/api/js?v=2.exp&libraries=drawing"></script>
添加如下代码:
var drawingManager = new qq.maps.drawing.DrawingManager({
drawingMode: null,
markerOptions:{
visible:false
},
circleOptions: {
fillColor: new qq.maps.Color(255, 208, 70, 0.3),
strokeColor: new qq.maps.Color(88, 88, 88, 1),
strokeWeight: 3,
clickable: false
}
});
drawingManager.setMap(map);
在相应的控件监听函数里加上相应的 绘制模式set
比如marker添加:
drawingManager.setDrawingMode(qq.maps.drawing.OverlayType.MARKER);
变成
qq.maps.event.addListener(circleOneControl, 'click', function() {
cleanControlcolor();
setControlcolor(circleOneControl);
drawingManager.setDrawingMode(qq.maps.drawing.OverlayType.MARKER);
});
如果要清除绘制模式,则
drawingManager.setDrawingMode(null);