1、Map的事件
change
( module:ol/events/Event~BaseEvent ) - 通用更改事件。当修订计数器增加时触发。change:layerGroup
(模块:ol/Object.ObjectEvent)change:size
(模块:ol/Object.ObjectEvent)change:target
(模块:ol/Object.ObjectEvent)change:view
(模块:ol/Object.ObjectEvent)click
( module:ol/MapBrowserEvent~MapBrowserEvent ) - 没有拖拽的点击。双击将触发其中的两个。dblclick
( module:ol/MapBrowserEvent~MapBrowserEvent ) - 真正的双击,没有拖动。error
( module:ol/events/Event~BaseEvent ) - 通用错误事件。发生错误时触发。moveend
( module:ol/MapEvent~MapEvent ) - 在地图移动后触发。movestart
( module:ol/MapEvent~MapEvent ) - 当地图开始移动时触发。pointerdrag
( module:ol/MapBrowserEvent~MapBrowserEvent ) - 拖动指针时触发。pointermove
( module:ol/MapBrowserEvent~MapBrowserEvent ) - 当指针移动时触发。请注意,在触摸设备上,这是在平移地图时触发的,因此与 mousemove 不同。postcompose
( module:ol/render/Event~RenderEvent ) - 在所有层都被渲染后触发。事件对象将没有上下文集。postrender
( module:ol/MapEvent~MapEvent ) - 在地图框渲染后触发。precompose
( module:ol/render/Event~RenderEvent ) - 在渲染层之前触发。事件对象将没有上下文集。propertychange
( module:ol/Object.ObjectEvent ) - 当属性改变时触发。rendercomplete
( module:ol/render/Event~RenderEvent ) - 渲染完成时触发,即当前视口的所有源和图块都已完成加载,并且所有图块都淡入。事件对象将没有上下文设置。singleclick
( module:ol/MapBrowserEvent~MapBrowserEvent ) - 真正的单击,没有拖动和双击。请注意,此事件会延迟 250 毫秒,以确保它不是双击。
以上事件都可以通过observable的方法on来实现
2、Map的可观察属性
姓名 | 类型 | 可设置 | ol/Object.ObjectEvent类型 | 描述 |
---|---|---|---|---|
layerGroup | 模块:ol/layer/Group~LayerGroup | 是的 | change:layergroup | 包含此地图中图层的图层组。 |
size | 模块:ol/大小~大小 | 不明确的 | 是的 | change:size | DOM 中地图的大小(以像素为单位)。 |
target | HTML 元素 | 字符串 | 不明确的 | 是的 | change:target | 地图在其中呈现的元素或元素的 id。 |
view | 模块:ol/查看~查看 | 是的 | change:view | 控制此地图的视图。 |
3、练习代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="ol.css">
<style>
*{
margin: 0;
padding: 0;
}
.map{
width: 50%;
height: 100%;
position: absolute;
}
.map1{
width: 50%;
height: 100%;
margin-left: 50%;
position: absolute;
}
#wxhq{
width: 32px;
height: 32px;
background: url(wjx.png) center center no-repeat;
background-size: 100% 100%;
}
.change{
z-index: 2;
position: absolute;
}
</style>
</head>
<body>
<input class="change" type="button" value="改变地图绑定控件" onclick="change()">
<div id="map" class="map"></div>
<div id="map1" class="map1"></div>
<div id="wxhq"></div>
<script src="ol.js"></script>
<script>
// 加载openstreet图层 墨卡托投影
// var osmLayer = new ol.layer.Tile({
// source: new ol.source.OSM()
// })
//WGS84投影 天地图
var tdtmap = new ol.layer.Tile({
source:new ol.source.XYZ({
url:"http://t4.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=7ab767e38fe3d9c04f144a091cff214f"
})
})
var zjmap = new ol.layer.Tile({
source:new ol.source.XYZ({
url:"http://t4.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=7ab767e38fe3d9c04f144a091cff214f"
})
})
//定义地图的中心
// var beijing = ol.proj.transform([116.40,39.92],"EPSG:4326","EPSG:3857");
//创建视图
var projection = new ol.proj.Projection({
code:"EPSG:4326",
units:"degrees"
})
var view = new ol.View({
projection:projection,
center:[116.40,39.92],
zoom:10
})
//创建地图控件
var controls = new ol.control.defaults().extend([new ol.control.FullScreen()]);
//创建一个互动控件
var interactions = new ol.interaction.defaults().extend([new ol.interaction.DragRotateAndZoom()]);
//创建一个悬浮控件
var overlay = new ol.Overlay({
position:[116.40,39.92],
element:document.getElementById("wxhq")
})
var map = new ol.Map({
target:"map",
controls:controls,
interactions:interactions,
layers:[tdtmap,zjmap],
overlays:[overlay],
moveTolerance:1
})
map.setView(view);
console.log(map.getView());
map.on("movestart",function(e){
console.log("我要开始移动了")
})
map.on("moveend",function(e){
console.log("我已经结束移动了")
})
function change(){
//获取地图当前绑定的div
var target = map.getTarget();
if(target =="map"){
map.setTarget("map1");
}else{
map.setTarget("map");
}
}
map.on("change:target",function(e){
console.log("地图的目标发生改变了哦")
})
</script>
</body>
</html>