@bebranded/bb-contents 1.0.96 → 1.0.98
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 +43 -58
- package/package.json +1 -1
package/bb-contents.js
CHANGED
|
@@ -320,13 +320,9 @@
|
|
|
320
320
|
${isVertical ? 'min-height: 100px;' : ''}
|
|
321
321
|
`;
|
|
322
322
|
|
|
323
|
-
//
|
|
324
|
-
|
|
325
|
-
const repeatBlock2 = mainBlock.cloneNode(true);
|
|
326
|
-
|
|
323
|
+
// Ne créer que le mainBlock pour l'instant
|
|
324
|
+
// Les copies seront créées après le chargement des images
|
|
327
325
|
scrollContainer.appendChild(mainBlock);
|
|
328
|
-
scrollContainer.appendChild(repeatBlock1);
|
|
329
|
-
scrollContainer.appendChild(repeatBlock2);
|
|
330
326
|
mainContainer.appendChild(scrollContainer);
|
|
331
327
|
|
|
332
328
|
element.innerHTML = '';
|
|
@@ -368,6 +364,12 @@
|
|
|
368
364
|
speed, direction, gap, isVertical, useAutoHeight, contentSize, gapSize
|
|
369
365
|
});
|
|
370
366
|
} else {
|
|
367
|
+
// Solution standard : créer les copies maintenant (les navigateurs non-Safari gèrent mieux)
|
|
368
|
+
const repeatBlock1 = mainBlock.cloneNode(true);
|
|
369
|
+
const repeatBlock2 = mainBlock.cloneNode(true);
|
|
370
|
+
scrollContainer.appendChild(repeatBlock1);
|
|
371
|
+
scrollContainer.appendChild(repeatBlock2);
|
|
372
|
+
|
|
371
373
|
// Solution standard pour autres navigateurs
|
|
372
374
|
this.initStandardAnimation(element, scrollContainer, mainBlock, {
|
|
373
375
|
speed, direction, pauseOnHover, gap, isVertical, useAutoHeight, contentSize, gapSize, step
|
|
@@ -389,65 +391,40 @@
|
|
|
389
391
|
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent) ||
|
|
390
392
|
(window.innerWidth <= 768 && /Chrome|CriOS/i.test(navigator.userAgent));
|
|
391
393
|
|
|
392
|
-
//
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
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
|
-
}
|
|
410
|
-
|
|
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 {
|
|
394
|
+
// SOLUTION MOBILE : Charger toutes les images AVANT de créer les copies pour éviter le flou
|
|
395
|
+
const loadImage = (img) => {
|
|
396
|
+
return new Promise((resolve) => {
|
|
397
|
+
if (img.complete && img.naturalWidth > 0 && img.naturalHeight > 0) {
|
|
398
|
+
// Image déjà chargée et rendue
|
|
399
|
+
imagesLoaded++;
|
|
400
|
+
resolve();
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
|
|
416
404
|
if (img.dataset.src && !img.src) {
|
|
417
405
|
img.src = img.dataset.src;
|
|
418
406
|
}
|
|
419
407
|
|
|
420
|
-
//
|
|
421
|
-
if (!img.loading) {
|
|
422
|
-
img.loading =
|
|
408
|
+
// Utiliser eager sur mobile pour éviter le flou de lazy loading
|
|
409
|
+
if (!img.loading && isMobile) {
|
|
410
|
+
img.loading = 'eager';
|
|
423
411
|
}
|
|
424
412
|
|
|
425
413
|
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
414
|
imagesLoaded++;
|
|
415
|
+
// Forcer un reflow pour s'assurer que l'image est rendue
|
|
416
|
+
void img.offsetHeight;
|
|
417
|
+
resolve();
|
|
445
418
|
};
|
|
446
419
|
img.onerror = () => {
|
|
447
420
|
imagesLoaded++;
|
|
421
|
+
resolve(); // Résoudre même en cas d'erreur
|
|
448
422
|
};
|
|
449
|
-
}
|
|
450
|
-
}
|
|
423
|
+
});
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
// Charger toutes les images en parallèle
|
|
427
|
+
Promise.all(Array.from(images).map(loadImage));
|
|
451
428
|
|
|
452
429
|
// Timeout plus long sur mobile pour laisser le temps aux images de se charger
|
|
453
430
|
const maxWaitTime = isMobile ? 5000 : 3000; // 5 secondes sur mobile
|
|
@@ -457,11 +434,19 @@
|
|
|
457
434
|
waitTimeout += 100;
|
|
458
435
|
|
|
459
436
|
if (imagesLoaded >= totalImages || imagesLoaded === 0 || waitTimeout >= maxWaitTime) {
|
|
460
|
-
// Attendre
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
437
|
+
// Attendre un frame pour le rendu complet, surtout sur mobile
|
|
438
|
+
requestAnimationFrame(() => {
|
|
439
|
+
requestAnimationFrame(() => {
|
|
440
|
+
// Maintenant créer les copies avec les images complètement chargées
|
|
441
|
+
const repeatBlock1 = mainBlock.cloneNode(true);
|
|
442
|
+
const repeatBlock2 = mainBlock.cloneNode(true);
|
|
443
|
+
scrollContainer.appendChild(repeatBlock1);
|
|
444
|
+
scrollContainer.appendChild(repeatBlock2);
|
|
445
|
+
|
|
446
|
+
// Démarrer l'animation
|
|
447
|
+
startSafariAnimation();
|
|
448
|
+
});
|
|
449
|
+
});
|
|
465
450
|
} else {
|
|
466
451
|
setTimeout(waitForImages, 100);
|
|
467
452
|
}
|