→ לכל המאגר

G124 · טבלת השוואה שמתמלאת בגלילה

GSAP GSAP · ScrollTrigger · DrawSVG כרטיסיםמספרים ונתונים ממתין

טבלת "אנחנו מול הדרך הישנה" שהשורות שלה נדלקות אחת אחרי השנייה בכניסה, וסימני הווי מציירים את עצמם בעמודה שלנו בזמן שהאיקסים בעמודה השנייה נמחקים. השוואה שקוראים בקצב.

מתי משתמשים: עמוד מכירה, השוואת חבילות, "למה אנחנו". ארבע עד שבע שורות, שתי עמודות.

הדמו כאן עיצובי-ניטרלי בכוונה. כשהמהלך נכנס לפרויקט, מיובאת רק ההתנהגות: הצבעים, הרדיוסים, הפונטים והצללים יורשים את העיצוב של אותו פרויקט.

הדמו

גלול למטה, הדמו מגיע ↓
מה מקבלים
אצלנו
בדרך הישנה
אפיון לפני עיצוב
קופי שנכתב לגולש
מובייל קודם
מדידה מהיום הראשון
עלייה תוך שבועיים
עוד מסלול גלילה. נסה גם חזרה למעלה ↑
כל שורה היא טריגר משלה (batch), הווי הוא path עם DrawSVG והאיקס דוהה. עמודת "אנחנו" מודגשת ברקע עדין קבוע, לא במעבר. במובייל הטבלה נשארת טבלה (שתי עמודות צרות), הפונט יורד ל-14px.

קוד להדבקה

הקוד כאן עומד בפני עצמו. כל טוקן עיצוב נושא ברירת מחדל, מחלקות העזר של המאגר מוטמעות בו, ותגי הסקריפט מסודרים לפי הסדר הנכון. פרויקט שמגדיר --accent או --line משלו יורש אותם אוטומטית. הרכיב הזה מסתמך על dir="rtl".

פתח קובץ עצמאי ↗
הצג את הקוד כאן

CSS

/* מחלקות עזר של המאגר שהרכיב הזה משתמש בהן */
.stage{padding:var(--sec, clamp(120px, 12vw, 260px)) var(--gutter, clamp(24px, 5vw, 96px));position:relative}
.stage.tight{padding-block:clamp(48px,5vw,90px)}
.stage.full{padding-inline:0}

/* G124 · טבלת השוואה שמתמלאת בגלילה */
.cmp{max-width:min(860px,94vw);margin-inline:auto;border:1px solid var(--line, #e4e4ee);border-radius:var(--r, 14px);overflow:hidden;background:var(--card, #fff)}
.cmp-row{display:grid;grid-template-columns:1.6fr 1fr 1fr;align-items:center;border-bottom:1px solid var(--line, #e4e4ee);opacity:.35;translate:0 10px}
.cmp-row:last-child{border-bottom:0}
.cmp-row.head{opacity:1;translate:0;background:var(--bg, #f7f7fa);font-size:13px;color:var(--muted, #6a6d85);letter-spacing:.06em}
.cmp-row>div{padding:clamp(12px,1.6vw,20px)}
.cmp-row .us{background:color-mix(in srgb,var(--accent, #4a3aff) 7%,transparent);text-align:center}
.cmp-row .them{text-align:center;color:var(--muted, #6a6d85)}
.cmp-row b{font-size:clamp(15px,1.5vw,18px)}
.cmp svg{width:26px;height:26px;overflow:visible;vertical-align:middle}
.cmp .ok path{fill:none;stroke:var(--accent, #4a3aff);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.cmp .no path{fill:none;stroke:var(--muted, #6a6d85);stroke-width:2.5;stroke-linecap:round}
@media(max-width:767px){.cmp-row{grid-template-columns:1.3fr 1fr 1fr}.cmp-row b{font-size:14px}.cmp svg{width:20px;height:20px}}

HTML

<div class="stage"><div class="cmp">
  <div class="cmp-row head"><div>מה מקבלים</div><div class="us">אצלנו</div><div class="them">בדרך הישנה</div></div>
  <div class="cmp-row"><div><b>אפיון לפני עיצוב</b></div><div class="us"><svg class="ok" viewBox="0 0 24 24"><path d="M4 13l5 5 11-12"/></svg></div><div class="them"><svg class="no" viewBox="0 0 24 24"><path d="M6 6l12 12M18 6L6 18"/></svg></div></div>
  <div class="cmp-row"><div><b>קופי שנכתב לגולש</b></div><div class="us"><svg class="ok" viewBox="0 0 24 24"><path d="M4 13l5 5 11-12"/></svg></div><div class="them"><svg class="no" viewBox="0 0 24 24"><path d="M6 6l12 12M18 6L6 18"/></svg></div></div>
  <div class="cmp-row"><div><b>מובייל קודם</b></div><div class="us"><svg class="ok" viewBox="0 0 24 24"><path d="M4 13l5 5 11-12"/></svg></div><div class="them"><svg class="no" viewBox="0 0 24 24"><path d="M6 6l12 12M18 6L6 18"/></svg></div></div>
  <div class="cmp-row"><div><b>מדידה מהיום הראשון</b></div><div class="us"><svg class="ok" viewBox="0 0 24 24"><path d="M4 13l5 5 11-12"/></svg></div><div class="them"><svg class="no" viewBox="0 0 24 24"><path d="M6 6l12 12M18 6L6 18"/></svg></div></div>
  <div class="cmp-row"><div><b>עלייה תוך שבועיים</b></div><div class="us"><svg class="ok" viewBox="0 0 24 24"><path d="M4 13l5 5 11-12"/></svg></div><div class="them"><svg class="no" viewBox="0 0 24 24"><path d="M6 6l12 12M18 6L6 18"/></svg></div></div>
</div></div>

JS

gsap.registerPlugin(ScrollTrigger, DrawSVGPlugin);

(function(){
  const rows=gsap.utils.toArray(".cmp-row:not(.head)");
  if(matchMedia("(prefers-reduced-motion: reduce)").matches){gsap.set(rows,{opacity:1,translate:"0 0"});return;}
  gsap.set(".cmp .ok path",{drawSVG:"0%"});
  ScrollTrigger.batch(rows,{start:"top 85%",once:true,onEnter:batch=>{
    batch.forEach((row,i)=>{
      gsap.timeline({delay:i*.12})
        .to(row,{opacity:1,translate:"0 0",duration:.45,ease:"power3.out"})
        .to(row.querySelector(".ok path"),{drawSVG:"100%",duration:.4,ease:"power2.inOut"},"-=.2")
        .to(row.querySelector(".no"),{opacity:.35,scale:.85,duration:.3},"-=.3");
    });
  }});
})();