Use translate3d and translate where available.
This commit is contained in:
@@ -105,12 +105,10 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, {
|
||||
var current = (this.preserveCenter) ?
|
||||
this.map.getPixelFromLonLat(this.map.getCenter()) : evt.xy;
|
||||
|
||||
var dx = Math.round((current.x - pinchOrigin.x) + (scale - 1) * (containerOrigin.x - pinchOrigin.x));
|
||||
var dy = Math.round((current.y - pinchOrigin.y) + (scale - 1) * (containerOrigin.y - pinchOrigin.y));
|
||||
var dx = Math.round((containerOrigin.x + current.x - pinchOrigin.x) + (scale - 1) * (containerOrigin.x - pinchOrigin.x));
|
||||
var dy = Math.round((containerOrigin.y + current.y - pinchOrigin.y) + (scale - 1) * (containerOrigin.y - pinchOrigin.y));
|
||||
|
||||
this.applyTransform(
|
||||
"translate(" + dx + "px, " + dy + "px) scale(" + scale + ")"
|
||||
);
|
||||
this.map.applyTransform(dx, dy, scale);
|
||||
this.currentCenter = current;
|
||||
},
|
||||
|
||||
|
||||
@@ -1758,17 +1758,16 @@ OpenLayers.Map = OpenLayers.Class({
|
||||
}
|
||||
this.center = null;
|
||||
if (dx) {
|
||||
this.layerContainerDiv.style.left =
|
||||
(this.layerContainerOriginPx.x -= dx) + "px";
|
||||
this.layerContainerOriginPx.x -= dx;
|
||||
this.minPx.x -= dx;
|
||||
this.maxPx.x -= dx;
|
||||
}
|
||||
if (dy) {
|
||||
this.layerContainerDiv.style.top =
|
||||
(this.layerContainerOriginPx.y -= dy) + "px";
|
||||
this.layerContainerOriginPx.y -= dy;
|
||||
this.minPx.y -= dy;
|
||||
this.maxPx.y -= dy;
|
||||
}
|
||||
this.applyTransform();
|
||||
var layer, i, len;
|
||||
for (i=0, len=this.layers.length; i<len; ++i) {
|
||||
layer = this.layers[i];
|
||||
@@ -1928,11 +1927,9 @@ OpenLayers.Map = OpenLayers.Class({
|
||||
// (re)set the layerContainerDiv's location
|
||||
if (zoomChanged || this.layerContainerOrigin == null) {
|
||||
this.layerContainerOrigin = this.getCachedCenter();
|
||||
var style = this.layerContainerDiv.style;
|
||||
style.left = "0px";
|
||||
style.top = "0px";
|
||||
this.layerContainerOriginPx.x = 0;
|
||||
this.layerContainerOriginPx.y = 0;
|
||||
this.applyTransform();
|
||||
var maxExtent = this.getMaxExtent({restricted: true});
|
||||
var maxExtentCenter = maxExtent.getCenterLonLat();
|
||||
var lonDelta = this.center.lon - maxExtentCenter.lon;
|
||||
@@ -2020,10 +2017,9 @@ OpenLayers.Map = OpenLayers.Class({
|
||||
var oldTop = this.layerContainerOriginPx.y;
|
||||
var newLeft = Math.round(originPx.x - newPx.x);
|
||||
var newTop = Math.round(originPx.y - newPx.y);
|
||||
this.layerContainerDiv.style.left =
|
||||
(this.layerContainerOriginPx.x = newLeft) + "px";
|
||||
this.layerContainerDiv.style.top =
|
||||
(this.layerContainerOriginPx.y = newTop) + "px";
|
||||
this.applyTransform(
|
||||
(this.layerContainerOriginPx.x = newLeft),
|
||||
(this.layerContainerOriginPx.y = newTop));
|
||||
var dx = oldLeft - newLeft;
|
||||
var dy = oldTop - newTop;
|
||||
this.minPx.x -= dx;
|
||||
@@ -2650,6 +2646,42 @@ OpenLayers.Map = OpenLayers.Class({
|
||||
return this.getLayerPxFromViewPortPx(px);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: applyTransform
|
||||
* Applies the given transform to layers.
|
||||
*/
|
||||
applyTransform: (function() {
|
||||
var transformProperty,
|
||||
translatePrefix = 'translate3d(',
|
||||
translatePostfix = ',0)',
|
||||
scalePrefix = 'scale3d(',
|
||||
scalePostfix = ',1)';
|
||||
return function(dx, dy, scale) {
|
||||
var origin = this.layerContainerOriginPx;
|
||||
dx = dx || origin.x;
|
||||
dy = dy || origin.y;
|
||||
scale = scale || 1;
|
||||
var style = this.layerContainerDiv.style;
|
||||
if (transformProperty === undefined) {
|
||||
transformProperty = OpenLayers.Util.vendorPrefix.style("transform");
|
||||
style[transformProperty] = translatePrefix + '0,0' + translatePostfix;
|
||||
if (!~style[transformProperty].indexOf(translatePrefix)) {
|
||||
translatePrefix = 'translate(';
|
||||
translatePostfix = ')';
|
||||
scalePrefix = 'scale(';
|
||||
scalePostfix = ')';
|
||||
}
|
||||
}
|
||||
if (transformProperty) {
|
||||
style[transformProperty] = translatePrefix + dx + 'px,' + dy + 'px' + translatePostfix + scalePrefix + scale + ',' + scale + scalePostfix;
|
||||
} else {
|
||||
style.left = dx + 'px';
|
||||
style.top = dy + 'px';
|
||||
}
|
||||
console.log(style[transformProperty]);
|
||||
};
|
||||
}()),
|
||||
|
||||
CLASS_NAME: "OpenLayers.Map"
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user