--- title: Openlayers卷帘 date: 2020-12-25 author: ac sidebar: false tags: - Openlayers categories: - GIS --- ## Openlayers卷帘 ![](./images/swipe.gif) “卷帘”功能可以分为两部分: 1. 控件元素的拖动。 2. 地图图层渲染流程的控制,对上层图层进行裁剪。 首先我们需要一个DOM组件作为拖动的“卷帘”,将其放在`map`容器内部,避免影响页面其他要素。 ```html
``` 在设置样式时,将map元素设为相对定位,则其内部的子元素的绝对定位将参考map元素的位置,即“卷帘”的拖动位置将参考map元素进行。根据“卷帘”组件拖动的位置,利用地图渲染相关的事件,对图层进行处理实现卷帘效果。 ### 地图渲染 地图渲染相关的事件: - `precompose`:未渲染,layers或layer被渲染前触发 - `postcompose`:layer图层渲染后触发,可以在事件源中获取用于渲染图层的上下文context,也可以得到canvas元素。图层的渲染其实就是将从数据源中请求得到的矢量数据,通过计算转换绘制在content上下文中或将请求得到的图片嵌入到上下文中相应的位置 - `postrender`:map被渲染完成后触发 当初始化`map`实例时,会先触发`map`的`precompose`事件,再依次触发`layers`集合中每个图层的`precompose`事件和`postcompose`事件,在所有layer都渲染完成后,才会触发`map`的`postrender `事件。 ### 实现原理 卷帘实现原理:在客户端监听上层图层的`postcompose`事件,获取渲染的上下文content,对其进行裁剪,让下层图层数据可见。 ```html 卷帘

卷帘(裁剪图层)

```