@bebranded/bb-contents 1.0.94-test → 1.0.96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bb-contents.js +59 -32
- package/package.json +1 -1
package/bb-contents.js
CHANGED
|
@@ -385,46 +385,70 @@
|
|
|
385
385
|
const totalImages = images.length;
|
|
386
386
|
|
|
387
387
|
|
|
388
|
-
//
|
|
388
|
+
// SOLUTION MOBILE : Amélioration du rendu des images sur mobile
|
|
389
|
+
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent) ||
|
|
390
|
+
(window.innerWidth <= 768 && /Chrome|CriOS/i.test(navigator.userAgent));
|
|
391
|
+
|
|
392
|
+
// OPTIMISATION: Charger les images en respectant le CSS Webflow
|
|
389
393
|
images.forEach(img => {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
+
// Préserver les styles CSS existants AVANT toute modification
|
|
395
|
+
const computedStyle = getComputedStyle(img);
|
|
396
|
+
const originalObjectFit = img.style.objectFit || computedStyle.objectFit;
|
|
397
|
+
const originalObjectPosition = img.style.objectPosition || computedStyle.objectPosition;
|
|
398
|
+
const originalWidth = computedStyle.width;
|
|
399
|
+
const originalHeight = computedStyle.height;
|
|
394
400
|
|
|
395
|
-
// OPTIMISATION:
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
401
|
+
// OPTIMISATION MOBILE : Améliorer le rendu des images sur mobile (sans transform sur l'image)
|
|
402
|
+
if (isMobile) {
|
|
403
|
+
// Forcer le rendu haute qualité sur mobile sans transform (évite conflit avec translate3d du parent)
|
|
404
|
+
img.style.backfaceVisibility = 'hidden';
|
|
405
|
+
img.style.webkitBackfaceVisibility = 'hidden';
|
|
406
|
+
// Ne PAS mettre transform sur l'image car le parent utilise translate3d
|
|
407
|
+
// Cela évite les problèmes de flou causés par les transformations multiples
|
|
408
|
+
img.style.willChange = 'auto'; // Éviter will-change qui peut causer du flou
|
|
409
|
+
}
|
|
400
410
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
if (
|
|
407
|
-
img.
|
|
411
|
+
// Charger l'image si nécessaire
|
|
412
|
+
if (img.complete && img.naturalWidth > 0) {
|
|
413
|
+
// Image déjà chargée, ne rien toucher
|
|
414
|
+
imagesLoaded++;
|
|
415
|
+
} else {
|
|
416
|
+
if (img.dataset.src && !img.src) {
|
|
417
|
+
img.src = img.dataset.src;
|
|
408
418
|
}
|
|
409
419
|
|
|
410
|
-
// OPTIMISATION:
|
|
411
|
-
if (!
|
|
412
|
-
img.
|
|
413
|
-
}
|
|
414
|
-
if (!originalHeight || originalHeight === '') {
|
|
415
|
-
img.style.height = 'auto';
|
|
420
|
+
// OPTIMISATION MOBILE : Utiliser eager sur mobile pour éviter le flou de lazy loading
|
|
421
|
+
if (!img.loading) {
|
|
422
|
+
img.loading = isMobile ? 'eager' : 'lazy'; // eager sur mobile pour meilleur rendu
|
|
416
423
|
}
|
|
417
424
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
425
|
+
img.onload = () => {
|
|
426
|
+
// OPTIMISATION: Restaurer les styles CSS après chargement
|
|
427
|
+
if (originalObjectFit && originalObjectFit !== 'none') {
|
|
428
|
+
img.style.objectFit = originalObjectFit;
|
|
429
|
+
}
|
|
430
|
+
if (originalObjectPosition && originalObjectPosition !== 'initial') {
|
|
431
|
+
img.style.objectPosition = originalObjectPosition;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// OPTIMISATION MOBILE : Respecter les dimensions CSS de Webflow
|
|
435
|
+
// Ne PAS forcer auto si les dimensions CSS sont définies dans Webflow
|
|
436
|
+
// Le CSS de Webflow prend toujours le dessus
|
|
437
|
+
|
|
438
|
+
// Forcer le recalcul pour mobile (important pour le rendu)
|
|
439
|
+
if (isMobile) {
|
|
440
|
+
// Force reflow pour meilleur rendu sans ajouter de transform
|
|
441
|
+
void img.offsetHeight;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
imagesLoaded++;
|
|
445
|
+
};
|
|
446
|
+
img.onerror = () => {
|
|
447
|
+
imagesLoaded++;
|
|
448
|
+
};
|
|
449
|
+
}
|
|
423
450
|
});
|
|
424
451
|
|
|
425
|
-
// SOLUTION SAFARI MOBILE SIMPLE : Attendre plus longtemps
|
|
426
|
-
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
|
|
427
|
-
|
|
428
452
|
// Timeout plus long sur mobile pour laisser le temps aux images de se charger
|
|
429
453
|
const maxWaitTime = isMobile ? 5000 : 3000; // 5 secondes sur mobile
|
|
430
454
|
let waitTimeout = 0;
|
|
@@ -451,7 +475,10 @@
|
|
|
451
475
|
images.forEach(img => {
|
|
452
476
|
if (img.dataset.src && !img.src) {
|
|
453
477
|
img.src = img.dataset.src;
|
|
454
|
-
|
|
478
|
+
// Ne pas forcer eager sur mobile, laisser le lazy loading
|
|
479
|
+
if (!img.loading && !isMobile) {
|
|
480
|
+
img.loading = 'eager';
|
|
481
|
+
}
|
|
455
482
|
}
|
|
456
483
|
});
|
|
457
484
|
}
|