fix(reader): corriger le chevauchement des pages en mode scroll avec zoom

En mode scroll infini, le zoom était appliqué via transform: scale() qui
n'affecte pas le flux de mise en page. Les pages se chevauchaient visuellement
quand le zoom était modifié. Passage à la propriété CSS zoom dans les deux
modes pour un comportement de layout correct.

Met aussi à jour le calcul de hauteur des placeholders pour inclure le
facteur de zoom et éviter les sauts de layout lors du chargement paresseux.
This commit is contained in:
ext.jeremy.guillot@maxicoffee.domains
2026-03-26 15:56:18 +01:00
parent c2b55e9018
commit 59f72339fa
2 changed files with 5 additions and 9 deletions

View File

@@ -94,14 +94,14 @@ import ReaderPage from './ReaderPage.vue';
}); });
}; };
// Calcul de la hauteur du placeholder — miroir exact du maxWidth de ReaderPage // Calcul de la hauteur du placeholder — miroir exact du maxWidth de ReaderPage, zoom inclus
const getPlaceholderHeight = (page) => { const getPlaceholderHeight = (page) => {
const dims = page?.dimensions; const dims = page?.dimensions;
if (!dims?.width || !dims?.height) return 800; if (!dims?.width || !dims?.height) return Math.round(800 * props.zoom);
const displayWidth = windowWidth.value < 1200 const displayWidth = windowWidth.value < 1200
? Math.min(dims.width, windowWidth.value * 0.95) ? Math.min(dims.width, windowWidth.value * 0.95)
: Math.min(dims.width, 1200); : Math.min(dims.width, 1200);
return Math.round((dims.height / dims.width) * displayWidth); return Math.round((dims.height / dims.width) * displayWidth * props.zoom);
}; };
const setupObservers = () => { const setupObservers = () => {

View File

@@ -87,13 +87,9 @@ import { useReaderStore } from '../../application/store/readerStore';
const store = useReaderStore(); const store = useReaderStore();
// En mode single : zoom via la propriété CSS `zoom` (affecte le layout → scrollbars naturelles) // zoom via la propriété CSS `zoom` dans les deux modes (affecte le layout → pas de chevauchement en mode scroll)
// En mode infinite : zoom via transform: scale (pas d'impact layout souhaité)
const containerStyle = computed(() => { const containerStyle = computed(() => {
if (store.readingMode === 'single') { return { zoom: props.zoom };
return { zoom: props.zoom };
}
return { transform: `scale(${props.zoom})` };
}); });
const imageRef = ref(null); const imageRef = ref(null);