Merge pull request #8914 from fredj/layer_className

Add new className property to ol/layer/Base
This commit is contained in:
Frédéric Junod
2018-11-14 16:23:56 +01:00
committed by GitHub
9 changed files with 120 additions and 2 deletions

View File

@@ -0,0 +1,3 @@
.bw {
filter: grayscale(100%);
}

View File

@@ -3,7 +3,7 @@ layout: example.html
title: Semi-Transparent Layer
shortdesc: Example of a map with a semi-transparent layer.
docs: >
This example will display a tiled MaxBox layer semi-transparently over an OSM background.
This example will display a tiled MaxBox layer semi-transparently over an OSM background. The OSM layer is changed to back and white by using a CSS filter.
tags: "transparent, osm, tilejson"
---
<div id="map" class="map"></div>

View File

@@ -9,6 +9,7 @@ import TileJSON from '../src/ol/source/TileJSON.js';
const map = new Map({
layers: [
new TileLayer({
className: 'bw',
source: new OSM()
}),
new TileLayer({

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@@ -0,0 +1,25 @@
<!DOCTYPE html>
<html>
<head>
<style>
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
#map {
width: 100%;
height: 100%;
}
.bw {
filter: grayscale(100%);
}
</style>
</head>
<body>
<div id="map"></div>
<script src="main.js"></script>
</body>
</script>
</html>

View File

@@ -0,0 +1,70 @@
import Map from '../../../src/ol/CompositeMap.js';
import View from '../../../src/ol/View.js';
import Feature from '../../../src/ol/Feature.js';
import LineString from '../../../src/ol/geom/LineString.js';
import VectorLayer from '../../../src/ol/layer/Vector.js';
import VectorSource from '../../../src/ol/source/Vector.js';
import Style from '../../../src/ol/style/Style.js';
import Stroke from '../../../src/ol/style/Stroke.js';
const vectorSource = new VectorSource();
let feature;
feature = new Feature({
geometry: new LineString([[-60, 60], [45, 60]])
});
vectorSource.addFeature(feature);
feature = new Feature({
geometry: new LineString([[-60, -50], [30, 10]])
});
feature.setStyle(new Style({
stroke: new Stroke({color: '#f00', width: 3})
}));
vectorSource.addFeature(feature);
feature = new Feature({
geometry: new LineString([[-110, -100], [0, 100], [100, -90]])
});
feature.setStyle(new Style({
stroke: new Stroke({
color: 'rgba(55, 55, 55, 0.75)',
width: 5,
lineCap: 'square',
lineDash: [4, 8],
lineJoin: 'round'
})
}));
vectorSource.addFeature(feature);
feature = new Feature({
geometry: new LineString([[-80, 80], [80, 80], [-40, -90]])
});
feature.setStyle([
new Style({
stroke: new Stroke({color: '#F2F211', width: 5})
}),
new Style({
stroke: new Stroke({color: '#292921', width: 1})
})
]);
vectorSource.addFeature(feature);
new Map({
pixelRatio: 1,
layers: [
new VectorLayer({
className: 'bw',
source: vectorSource
})
],
target: 'map',
view: new View({
center: [0, 0],
resolution: 1
})
});
render();

View File

@@ -10,6 +10,7 @@ import {assign} from '../obj.js';
/**
* @typedef {Object} Options
* @property {string} [className='ol-layer'] A CSS class name to set to the layer element.
* @property {number} [opacity=1] Opacity (0, 1).
* @property {boolean} [visible=true] Visibility.
* @property {import("../extent.js").Extent} [extent] The bounding extent for layer rendering. The layer will not be
@@ -57,6 +58,13 @@ class BaseLayer extends BaseObject {
properties[LayerProperty.MIN_RESOLUTION] =
options.minResolution !== undefined ? options.minResolution : 0;
/**
* @type {string}
* @private
*/
this.className_ = properties.className !== undefined ? options.className : 'ol-layer';
delete properties.className;
this.setProperties(properties);
/**
@@ -67,6 +75,13 @@ class BaseLayer extends BaseObject {
}
/**
* @return {string} CSS class name.
*/
getClassName() {
return this.className_;
}
/**
* @return {import("./Layer.js").State} Layer state.
*/

View File

@@ -44,7 +44,10 @@ class IntermediateCanvasRenderer extends CanvasLayerRenderer {
* @type {CanvasRenderingContext2D}
*/
this.layerContext = createCanvasContext2D();
this.layerContext.canvas.style.position = 'absolute';
const canvas = this.layerContext.canvas;
canvas.style.position = 'absolute';
canvas.className = this.getLayer().getClassName();
}
/**

View File

@@ -83,6 +83,7 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
const canvas = this.context.canvas;
canvas.style.position = 'absolute';
canvas.className = this.getLayer().getClassName();
listen(labelCache, EventType.CLEAR, this.handleFontsChanged_, this);
}