Skip to content

Commit a9ae7a8

Browse files
authored
fix: slide scale = container scale * zoom scale (#2355)
1 parent 0f330a0 commit a9ae7a8

File tree

2 files changed

+12
-12
lines changed

2 files changed

+12
-12
lines changed

packages/client/internals/SlideContainer.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ const contentStyle = computed(() => ({
5252
...props.contentStyle,
5353
'height': `${slideHeight.value}px`,
5454
'width': `${slideWidth.value}px`,
55-
'transform': `translate(-50%, -50%) scale(${scale.value})`,
5655
'--slidev-slide-scale': scale.value,
5756
}))
5857
@@ -117,6 +116,8 @@ const snapshot = computed(() => {
117116
}
118117
119118
.slidev-slide-content {
119+
--slidev-slide-container-scale: var(--slidev-slide-scale);
120+
transform: translate(-50%, -50%) scale(var(--slidev-slide-scale));
120121
@apply absolute left-1/2 top-1/2 overflow-hidden bg-main;
121122
}
122123
</style>

packages/client/internals/SlideWrapper.vue

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,9 @@ provideLocal(injectionRenderContext, ref(props.renderContext))
3232
provideLocal(injectionClicksContext, toRef(props, 'clicksContext'))
3333
provideLocal(injectionSlideZoom, zoom)
3434
35-
const zoomStyle = computed(() => {
36-
return zoom.value === 1
37-
? undefined
38-
: {
39-
width: `${100 / zoom.value}%`,
40-
height: `${100 / zoom.value}%`,
41-
transformOrigin: 'top left',
42-
transform: `scale(${zoom.value})`,
43-
}
44-
})
4535
const style = computed<CSSProperties>(() => ({
46-
...zoomStyle.value,
4736
'user-select': configs.selectable ? undefined : 'none',
37+
'--slidev-slide-zoom-scale': zoom.value === 1 ? undefined : zoom.value,
4838
}))
4939
</script>
5040

@@ -69,5 +59,14 @@ const style = computed<CSSProperties>(() => ({
6959
.slidev-page {
7060
position: absolute;
7161
inset: 0;
62+
63+
/* Zoom handling */
64+
--slidev-slide-zoom-scale: 1;
65+
width: calc(100% / var(--slidev-slide-zoom-scale));
66+
height: calc(100% / var(--slidev-slide-zoom-scale));
67+
transform-origin: top left;
68+
transform: scale(var(--slidev-slide-zoom-scale));
69+
/* slide scale = container scale * zoom scale */
70+
--slidev-slide-scale: calc(var(--slidev-slide-container-scale) * var(--slidev-slide-zoom-scale));
7271
}
7372
</style>

0 commit comments

Comments
 (0)