Reputation: 1030
I have applied hammerjs gestures on a textblock. Textblock initially is positioned at center through this code:
.text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
When I apply any gesture to that text, -50% translation goes away. How to retain that -50% effect?
Here's the transformation code that I'm using while gestures are applied:
const diff = this.startRotation - Math.round(eve.rotation);
this.selectedTextBlock.rotation = this.selectedTextBlock.lastRotation - diff;
this.selectedTextBlock.scale = this.selectedTextBlock.lastScale * eve.scale;
this.selectedTextBlock.deltaX = this.selectedTextBlock.lastDeltaX + (eve.deltaX / this.selectedTextBlock.scale);
this.selectedTextBlock.deltaY = this.selectedTextBlock.lastDeltaY + (eve.deltaY / this.selectedTextBlock.scale);
transforms.push('scale(' + this.selectedTextBlock.scale + ')');
transforms.push('translate(' + this.selectedTextBlock.deltaX + 'px,' + this.selectedTextBlock.deltaY + 'px)');
transforms.push('rotate(' + this.selectedTextBlock.rotation + 'deg)');
this.selectedTextElement.style.transform = transforms.join(' ');
Upvotes: 0
Views: 71
Reputation: 2020
Since you are set a new X, Y information to transform here, naturally the existing information is distorted. transforms.push('translate(' + this.selectedTextBlock.deltaX + 'px,' + this.selectedTextBlock.deltaY + 'px)');
The most likely solution to this is to process the two pieces of information.
transforms.push('translate(calc(' + this.selectedTextBlock.deltaX + 'px - 50%), calc(' + this.selectedTextBlock.deltaY + 'px - 50%))');
Your new code should be:
const diff = this.startRotation - Math.round(eve.rotation);
this.selectedTextBlock.rotation = this.selectedTextBlock.lastRotation - diff;
this.selectedTextBlock.scale = this.selectedTextBlock.lastScale * eve.scale;
this.selectedTextBlock.deltaX = this.selectedTextBlock.lastDeltaX + (eve.deltaX / this.selectedTextBlock.scale);
this.selectedTextBlock.deltaY = this.selectedTextBlock.lastDeltaY + (eve.deltaY / this.selectedTextBlock.scale);
transforms.push('scale(' + this.selectedTextBlock.scale + ')');
/* edited */ transforms.push('translate(calc(' + this.selectedTextBlock.deltaX + 'px - 50%), calc(' + this.selectedTextBlock.deltaY + 'px - 50%))');
transforms.push('rotate(' + this.selectedTextBlock.rotation + 'deg)');
this.selectedTextElement.style.transform = transforms.join(' ');
Upvotes: 1