Merge pull request #8914 from fredj/layer_className
Add new className property to ol/layer/Base
This commit is contained in:
3
examples/semi-transparent-layer.css
Normal file
3
examples/semi-transparent-layer.css
Normal file
@@ -0,0 +1,3 @@
|
||||
.bw {
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
@@ -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({
|
||||
|
||||
BIN
rendering/cases/linestring-style-css-filter/expected.png
Normal file
BIN
rendering/cases/linestring-style-css-filter/expected.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.6 KiB |
25
rendering/cases/linestring-style-css-filter/index.html
Normal file
25
rendering/cases/linestring-style-css-filter/index.html
Normal 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>
|
||||
70
rendering/cases/linestring-style-css-filter/main.js
Normal file
70
rendering/cases/linestring-style-css-filter/main.js
Normal 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();
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user