Wrap setOpacity to make it IE7-8 compatible
This commit is contained in:
@@ -6,6 +6,7 @@ goog.provide('ol.dom.BrowserFeature');
|
|||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.dom');
|
goog.require('goog.dom');
|
||||||
goog.require('goog.dom.TagName');
|
goog.require('goog.dom.TagName');
|
||||||
|
goog.require('goog.style');
|
||||||
goog.require('goog.userAgent');
|
goog.require('goog.userAgent');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('goog.vec.Mat4');
|
||||||
|
|
||||||
@@ -81,7 +82,10 @@ ol.dom.BrowserFeature = {
|
|||||||
has3d !== 'none');
|
has3d !== 'none');
|
||||||
})(),
|
})(),
|
||||||
USE_MS_MATRIX_TRANSFORM:
|
USE_MS_MATRIX_TRANSFORM:
|
||||||
(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9.0'))
|
(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9.0')),
|
||||||
|
USE_MS_ALPHA_FILTER:
|
||||||
|
(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9.0') &&
|
||||||
|
goog.userAgent.VERSION !== '')
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -105,6 +109,49 @@ ol.dom.setTransform = function(element, value) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the opacity of an element, in an IE-compatible way
|
||||||
|
* @param {!Element} element Element
|
||||||
|
* @param {number} value Opacity, [0..1]
|
||||||
|
*/
|
||||||
|
ol.dom.setOpacity = function(element, value) {
|
||||||
|
if (ol.dom.BrowserFeature.USE_MS_ALPHA_FILTER) {
|
||||||
|
/** @type {string} */
|
||||||
|
var filter = element.currentStyle.filter;
|
||||||
|
|
||||||
|
/** @type {RegExp} */
|
||||||
|
var regex;
|
||||||
|
|
||||||
|
/** @type {string} */
|
||||||
|
var alpha;
|
||||||
|
|
||||||
|
if (goog.userAgent.VERSION == '8.0') {
|
||||||
|
regex = /progid:DXImageTransform\.Microsoft\.Alpha\(.*?\)/i,
|
||||||
|
alpha = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=' +
|
||||||
|
(value * 100) + ')';
|
||||||
|
} else {
|
||||||
|
regex = /alpha\(.*?\)/i;
|
||||||
|
alpha = 'alpha(opacity=' + (value * 100) + ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
var newFilter = filter.replace(regex, alpha);
|
||||||
|
if (newFilter === filter) {
|
||||||
|
// no replace was made? just append the new alpha filter instead
|
||||||
|
newFilter += ' ' + alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
element.style.filter = newFilter;
|
||||||
|
|
||||||
|
// Fix to apply filter to absolutely-positioned children element
|
||||||
|
if (element.currentStyle.zIndex === 'auto') {
|
||||||
|
element.style.zIndex = -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
goog.style.setOpacity(element, value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the IE matrix transform without replacing other filters
|
* Sets the IE matrix transform without replacing other filters
|
||||||
* @private
|
* @private
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame =
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (layerState.opacity != this.renderedOpacity_) {
|
if (layerState.opacity != this.renderedOpacity_) {
|
||||||
goog.style.setOpacity(this.target, layerState.opacity);
|
ol.dom.setOpacity(this.target, layerState.opacity);
|
||||||
this.renderedOpacity_ = layerState.opacity;
|
this.renderedOpacity_ = layerState.opacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user