Skip to content

Commit 3acdf5e

Browse files
authored
fix: Improve zoom animations (#9584)
1 parent 4657199 commit 3acdf5e

3 files changed

Lines changed: 19 additions & 8 deletions

File tree

packages/blockly/core/css.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,14 @@ let content = `
8484
8585
.blocklyBlockCanvas.blocklyCanvasTransitioning,
8686
.blocklyBubbleCanvas.blocklyCanvasTransitioning {
87-
transition: transform .5s;
87+
transition: transform .15s;
88+
}
89+
90+
@media (prefers-reduced-motion) {
91+
.blocklyBlockCanvas.blocklyCanvasTransitioning,
92+
.blocklyBubbleCanvas.blocklyCanvasTransitioning {
93+
transition: none;
94+
}
8895
}
8996
9097
.blocklyEmboss {

packages/blockly/core/layer_manager.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,11 @@ export class LayerManager {
7373
* @internal
7474
*/
7575
appendToAnimationLayer(elem: IRenderedElement) {
76-
const currentTransform = this.dragLayer?.getAttribute('transform');
76+
const currentTransform = this.dragLayer?.style.transform;
7777
// Only update the current transform when appending, so animations don't
7878
// move if the workspace moves.
79-
if (currentTransform) {
80-
this.animationLayer?.setAttribute('transform', currentTransform);
79+
if (currentTransform && this.animationLayer) {
80+
this.animationLayer.style.transform = currentTransform;
8181
}
8282
this.animationLayer?.appendChild(elem.getSvgRoot());
8383
}
@@ -88,10 +88,12 @@ export class LayerManager {
8888
* @internal
8989
*/
9090
translateLayers(newCoord: Coordinate, newScale: number) {
91-
const translation = `translate(${newCoord.x}, ${newCoord.y}) scale(${newScale})`;
92-
this.dragLayer?.setAttribute('transform', translation);
91+
const translation = `translate(${newCoord.x}px, ${newCoord.y}px) scale(${newScale})`;
92+
if (this.dragLayer) {
93+
this.dragLayer.style.transform = translation;
94+
}
9395
for (const [_, layer] of this.layers) {
94-
layer.setAttribute('transform', translation);
96+
layer.style.transform = translation;
9597
}
9698
}
9799

packages/blockly/core/zoom_controls.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,8 +373,10 @@ export class ZoomControls implements IPositionable {
373373
* @param e A mouse down event.
374374
*/
375375
private zoom(amount: number, e: PointerEvent) {
376+
this.workspace.beginCanvasTransition();
376377
this.workspace.markFocused();
377378
this.workspace.zoomCenter(amount);
379+
setTimeout(this.workspace.endCanvasTransition.bind(this.workspace), 150);
378380
this.fireZoomEvent();
379381
Touch.clearTouchIdentifier(); // Don't block future drags.
380382
e.stopPropagation(); // Don't start a workspace scroll.
@@ -459,7 +461,7 @@ export class ZoomControls implements IPositionable {
459461
this.workspace.zoomCenter(amount);
460462
this.workspace.scrollCenter();
461463

462-
setTimeout(this.workspace.endCanvasTransition.bind(this.workspace), 500);
464+
setTimeout(this.workspace.endCanvasTransition.bind(this.workspace), 150);
463465
this.fireZoomEvent();
464466
Touch.clearTouchIdentifier(); // Don't block future drags.
465467
e.stopPropagation(); // Don't start a workspace scroll.

0 commit comments

Comments
 (0)