@bebranded/bb-contents 1.0.107 → 1.0.109
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 +62 -4
- package/package.json +1 -1
package/bb-contents.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* BeBranded Contents
|
|
3
3
|
* Contenus additionnels français pour Webflow
|
|
4
|
-
* @version 1.0.
|
|
4
|
+
* @version 1.0.109
|
|
5
5
|
* @author BeBranded
|
|
6
6
|
* @license MIT
|
|
7
7
|
* @website https://www.bebranded.xyz
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
window._bbContentsInitialized = true;
|
|
33
33
|
|
|
34
34
|
// Log de démarrage simple (une seule fois)
|
|
35
|
-
console.log('bb-contents | v1.0.
|
|
35
|
+
console.log('bb-contents | v1.0.109');
|
|
36
36
|
|
|
37
37
|
// Configuration
|
|
38
38
|
const config = {
|
|
39
|
-
version: '1.0.
|
|
39
|
+
version: '1.0.109',
|
|
40
40
|
debug: false, // Debug désactivé pour rendu propre
|
|
41
41
|
prefix: 'bb-', // utilisé pour générer les sélecteurs (data-bb-*)
|
|
42
42
|
youtubeEndpoint: null, // URL du worker YouTube (à définir par l'utilisateur)
|
|
@@ -438,13 +438,22 @@
|
|
|
438
438
|
const waitForImages = () => {
|
|
439
439
|
waitTimeout += 100;
|
|
440
440
|
|
|
441
|
-
|
|
441
|
+
// Attendre que TOUTES les images soient chargées (ou s'il n'y a pas d'images, attendre un minimum)
|
|
442
|
+
if (totalImages === 0) {
|
|
443
|
+
// Pas d'images, démarrer après un court délai
|
|
444
|
+
const renderDelay = isMobile ? 500 : 100;
|
|
445
|
+
setTimeout(() => {
|
|
446
|
+
startSafariAnimation();
|
|
447
|
+
}, renderDelay);
|
|
448
|
+
} else if (imagesLoaded >= totalImages || waitTimeout >= maxWaitTime) {
|
|
449
|
+
// Toutes les images sont chargées OU timeout atteint
|
|
442
450
|
// Attendre plus longtemps sur mobile pour le rendu visuel
|
|
443
451
|
const renderDelay = isMobile ? 1000 : 200;
|
|
444
452
|
setTimeout(() => {
|
|
445
453
|
startSafariAnimation();
|
|
446
454
|
}, renderDelay);
|
|
447
455
|
} else {
|
|
456
|
+
// Continuer à attendre
|
|
448
457
|
setTimeout(waitForImages, 100);
|
|
449
458
|
}
|
|
450
459
|
};
|
|
@@ -462,6 +471,55 @@
|
|
|
462
471
|
});
|
|
463
472
|
}
|
|
464
473
|
|
|
474
|
+
// CORRECTION: Appliquer les styles CSS aux images dans les copies également
|
|
475
|
+
// pour éviter les images floues ou mal cadrées
|
|
476
|
+
const allImages = scrollContainer.querySelectorAll('img');
|
|
477
|
+
allImages.forEach(img => {
|
|
478
|
+
// Détecter si c'est un SVG (par l'extension du src ou le type)
|
|
479
|
+
const isSVG = img.src && (img.src.toLowerCase().endsWith('.svg') || img.src.includes('data:image/svg+xml'));
|
|
480
|
+
|
|
481
|
+
// Pour les SVG, optimiser le rendu sur Safari mobile
|
|
482
|
+
if (isSVG) {
|
|
483
|
+
// Forcer le GPU rendering pour améliorer la netteté
|
|
484
|
+
img.style.webkitTransform = 'translate3d(0, 0, 0)';
|
|
485
|
+
img.style.transform = 'translate3d(0, 0, 0)';
|
|
486
|
+
|
|
487
|
+
// Améliorer le rendu des SVG sur Safari
|
|
488
|
+
img.style.imageRendering = '-webkit-optimize-contrast';
|
|
489
|
+
img.style.imageRendering = 'crisp-edges';
|
|
490
|
+
img.style.imageRendering = 'auto'; // Fallback si crisp-edges n'est pas supporté
|
|
491
|
+
|
|
492
|
+
// Forcer un reflow pour stabiliser le rendu
|
|
493
|
+
void img.offsetHeight;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// Vérifier si l'image a déjà des styles inline
|
|
497
|
+
if (!img.style.objectFit) {
|
|
498
|
+
const computedStyle = getComputedStyle(img);
|
|
499
|
+
const objectFit = computedStyle.objectFit;
|
|
500
|
+
const objectPosition = computedStyle.objectPosition;
|
|
501
|
+
|
|
502
|
+
// Appliquer object-fit si défini dans le CSS
|
|
503
|
+
// Pour les SVG, être plus prudent avec object-fit
|
|
504
|
+
if (objectFit && objectFit !== 'none' && objectFit !== 'fill') {
|
|
505
|
+
if (!isSVG || objectFit === 'contain' || objectFit === 'scale-down') {
|
|
506
|
+
img.style.objectFit = objectFit;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
// Appliquer object-position si défini dans le CSS
|
|
510
|
+
if (objectPosition && objectPosition !== 'initial' && objectPosition !== '50% 50%') {
|
|
511
|
+
img.style.objectPosition = objectPosition;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
// Pour les SVG, forcer un re-render après application des styles
|
|
516
|
+
if (isSVG) {
|
|
517
|
+
requestAnimationFrame(() => {
|
|
518
|
+
void img.offsetHeight;
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
});
|
|
522
|
+
|
|
465
523
|
// Vérifier que les images ont une taille visible
|
|
466
524
|
let imagesWithSize = 0;
|
|
467
525
|
images.forEach(img => {
|