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:
parent
c2b55e9018
commit
59f72339fa
@@ -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 = () => {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user