ÿØÿà JFIF ` ` ÿþxØ
| Server IP : 109.234.164.53 / Your IP : 216.73.216.136 Web Server : Apache System : Linux cervelle.o2switch.net 4.18.0-553.32.1.lve.el8.x86_64 #1 SMP Thu Dec 19 13:14:03 UTC 2024 x86_64 User : computer3 ( 1098) PHP Version : 7.1.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/computer3/lachocolateriedevirginie.fr/business/business/ |
Upload File : |
<style>
..review-card {
flex: 0 0 calc(30% - 20px);
width: calc(30% - 20px);
margin-right: 20px;
box-sizing: border-box;
font-size: 14px;
text-align: left;
line-height: 1.9;
}
@media (max-width: 1100px) {
.review-card {
flex: 0 0 calc(46% - 20px);
width: calc(46% - 20px);
}
}
@media (max-width: 767px) {
.review-card {
flex: 0 0 calc(85% - 20px);
width: calc(85% - 20px);
}
}
</style>
<div class="reviews-wrap">
<div class="container">
<div class="reviews-head" style="position:relative;">
<div class="reviews-head-left">
<h2 style="position:absolute; left:50%; transform:translateX(-50%); margin:0;">
Témoignages de nos clients
</h2>
<div class="reviews-logo">
<img width="130" src="gga.png">
</div>
</div>
<div class="reviews-note">Note : {$moyenne_g}/5</div>
</div>
<div class="reviews-slider-wrap" style="overflow:hidden; width:100%;">
<div class="reviews-slider" id="reviews-slider" style="display:flex; flex-wrap:nowrap; transition: transform 0.4s ease; will-change:transform;">
{foreach from=$avis_g item=item}
<article class="review-card">
<div class="review-top">
<div class="review-avatar">{$item.initial|escape}</div>
<div>
<div class="review-name">{$item.nom|escape}</div>
<div class="review-stars">
{section name=s start=0 loop=$item.note}★{/section}
</div>
</div>
<div class="review-badge">Google</div>
</div>
<p class="review-text">{$item.texte nofilter}</p>
<div class="review-date">{$item.date_relative}</div>
</article>
{/foreach}
</div>
</div>
<div class="reviews-dots" id="reviews-dots"></div>
<div class="reviews-nav">
<button type="button" id="reviews-prev" aria-label="Avis précédents">‹</button>
<button type="button" id="reviews-next" aria-label="Avis suivants">›</button>
</div>
</div>
</div>
{literal}
<script>
(function(){
var slider = document.getElementById('reviews-slider');
if (!slider) return;
var dotsWrap = document.getElementById('reviews-dots');
var prevBtn = document.getElementById('reviews-prev');
var nextBtn = document.getElementById('reviews-next');
var index = 0;
/* ---- nombre de cartes visibles selon la largeur ---- */
function perView(){
var w = window.innerWidth;
if (w < 768) return 1;
if (w < 1100) return 2;
return 3;
}
/* ---- largeur réelle d'une carte + sa marge ---- */
function cardFullWidth(){
var c = slider.children[0];
if (!c) return 0;
var mr = parseFloat(window.getComputedStyle(c).marginRight) || 0;
return c.offsetWidth + mr;
}
function totalCards(){
return slider.children.length;
}
/* ---- points de navigation ---- */
function buildDots(){
if (!dotsWrap) return;
dotsWrap.innerHTML = '';
var pages = Math.ceil(totalCards() / perView());
for (var i = 0; i < pages; i++){
var b = document.createElement('button');
b.setAttribute('aria-label', 'Page ' + (i + 1));
(function(page){
b.addEventListener('click', function(){ index = page; update(); });
})(i);
dotsWrap.appendChild(b);
}
}
/* ---- déplacement du slider ---- */
function update(){
var pv = perView();
var pages = Math.ceil(totalCards() / pv);
if (index < 0) index = pages - 1;
if (index > pages-1) index = 0;
var offset = -(index * cardFullWidth());
slider.style.transform = 'translateX(' + offset + 'px)';
if (dotsWrap){
Array.prototype.forEach.call(dotsWrap.querySelectorAll('button'), function(btn, i){
btn.classList.toggle('is-active', i === index);
});
}
}
/* ---- swipe tactile mobile ---- */
var touchStartX = 0;
var touchEndX = 0;
slider.addEventListener('touchstart', function(e){
touchStartX = e.changedTouches[0].screenX;
}, { passive: true });
slider.addEventListener('touchend', function(e){
touchEndX = e.changedTouches[0].screenX;
var diff = touchStartX - touchEndX;
if (Math.abs(diff) > 40){
if (diff > 0) { index++; } else { index--; }
update();
}
}, { passive: true });
/* ---- boutons ---- */
if (prevBtn) prevBtn.addEventListener('click', function(){ index--; update(); });
if (nextBtn) nextBtn.addEventListener('click', function(){ index++; update(); });
window.addEventListener('resize', function(){
index = 0;
buildDots();
update();
});
buildDots();
update();
})();
</script>
{/literal}