Vinnaren i pepparkakshustävlingen!
Idag, 14:00
  #1
Medlem
Rekas avatar
Hej,
Om ni scrollar ner en bit på denna sida: https://www.btg-bioliquids.com/our-technology/
så ser man en tjusig klickbar rörlig bild över deras process att framställa material.

Vilken teknik har de använt för att skapa "bilden"?
Citera
Idag, 14:06
  #2
Medlem
Det är egentligen bara en "click" event listener i JavaScript.

När du klickar i en av bubblorna med siffror sker följande:

1) Innehållet i "flow charten" eller vad man vill kalla det byts ut. De har en animerad bild för varje steg i processen. Klickar du på bubbla 2 visas bild 2, osv. Du kan se med Inspect Element att innehållet i den rutan byts ut när man klickar.

2) De scrollar till nästa textruta nedan.

Detta är inget annat än ett bildspel, eller rättare sagt en "carousel". Bara att det ser mer tjusigt ut när bilden ("flödet") är animerad med lite bubblor och sådant.


Bildspel = byter automatiskt bild.
Carousel = byter innehåll (bild/text) när du klickar

Sök efter exempel på valfri carousel i t.ex. CodePen så hittar du "tekniken" bakom det.

Exempel på en "bubbel-knapp" kan se ut som:
<button class="bubbla" data-id="3">
<img src="bild1.gif" id="bildrutan">

Placera knapparna med position absolute, och ha bilden som position relative.
Det har dem också gjort. Du kan se de lekt fram o tillbaka med "top" och "left" för att hitta rätt position (X och Y).

Kod:
const bubbelKnappar = document.querySelectorAll(".bubbla");
bubbelKnappar?.forEach(bubbelKnapp => bubbelKnapp.addEventListener("click", bytbild));

function bytBild(e) {
e.stopImmediatePropagation();
e.preventDefault();
const bubbelId = Number(e.target.dataset.id);
const allImages = ["bild1.gif", "bild2.gif", "bild3.gif", "bild4.gif"];
const bildenDuVillVisa = allImages[bubbelId - 1];

const bildrutan = document.getElementById("bildrutan");
bildrutan?.src = bildenDuVillVisa; 
}

orkar inte formatera eller skriva ordentligt här, men i princip så.
Sen lägger du till att visa rätt textrutan under "processkartan" (bildrutan)

//skrivet på mobil
Om du inte vill använda gif-bilder kan du skapa varje slide på annat sätt. Typ SVG som animeras med CSS. Sen kan du exempelvis Base64-encode varje slide's HTML. lägga de i en array, sen hämta rätt HTML segment, base64-decode det och köra ".innerHTML" istället för ".src" på hela bildrutans container div. Varför base64? Jo för det är mer kompakt.
__________________
Senast redigerad av Holzman Idag kl. 14:24.
Citera
Idag, 14:24
  #3
Medlem
Rekas avatar
Mången tack för ett bra svar! :-)

Citat:
Ursprungligen postat av Holzman
Det är egentligen bara en "click" event listener i JavaScript.

När du klickar i en av bubblorna med siffror sker följande:

1) Innehållet i "flow charten" eller vad man vill kalla det byts ut. De har en animerad bild för varje steg i processen. Klickar du på bubbla 2 visas bild 2, osv. Du kan se med Inspect Element att innehållet i den rutan byts ut när man klickar.

2) De scrollar till nästa textruta nedan.

Detta är inget annat än ett bildspel, eller rättare sagt en "carousel". Bara att det ser mer tjusigt ut när bilden ("flödet") är animerad med lite bubblor och sådant.


Bildspel = byter automatiskt bild.
Carousel = byter innehåll (bild/text) när du klickar

Sök efter exempel på valfri carousel i t.ex. CodePen så hittar du "tekniken" bakom det.

Exempel på en "bubbel-knapp" kan se ut som:
<button class="bubbla" data-id="3">
<img src="bild1.gif" id="bildrutan">

Placera knapparna med position absolute, och ha bilden som position relative.
Det har dem också gjort. Du kan se de lekt fram o tillbaka med "top" och "left" för att hitta rätt position (X och Y).

Kod:
const bubbelKnappar = document.querySelectorAll(".bubbla");
bubbelKnappar?.forEach(bubbelKnapp => bubbelKnapp.addEventListener("click", bytbild));

function bytBild(e) {
e.stopImmediatePropagation();
e.preventDefault();
const bubbelId = Number(e.target.dataset.id);
const allImages = ["bild1.gif", "bild2.gif", "bild3.gif", "bild4.gif"];
const bildenDuVillVisa = allImages[bubbelId - 1];

const bildrutan = document.getElementById("bildrutan");
bildrutan?.src = bildenDuVillVisa; 
}

orkar inte formatera eller skriva ordentligt här, men i princip så.
Sen lägger du till att visa rätt textrutan under "processkartan" (bildrutan)

//skrivet på mobil
Om du inte vill använda gif-bilder kan du skapa varje slide på annat sätt. Typ SVG som animeras med CSS. Sen kan du exempelvis Base64-encode varje slide's HTML. lägga de i en array, sen hämta rätt HTML segment, base64-decode det och köra ".innerHTML" istället för ".src" på hela bildrutans container div.
Citera
Idag, 14:29
  #4
Medlem
Citat:
Ursprungligen postat av Reka
Mången tack för ett bra svar! :-)

Lägg också till en transition med CSS när bilden ändras eller så, så blir det en ease-in effekt t.ex.
Ser mer smooth ut.
Citera
Idag, 14:31
  #5
Medlem
kalkryggars avatar
Citat:
Ursprungligen postat av Holzman
Det är egentligen bara en "click" event listener i JavaScript.

När du klickar i en av bubblorna med siffror sker följande:

1) Innehållet i "flow charten" eller vad man vill kalla det byts ut. De har en animerad bild för varje steg i processen. Klickar du på bubbla 2 visas bild 2, osv. Du kan se med Inspect Element att innehållet i den rutan byts ut när man klickar.

2) De scrollar till nästa textruta nedan.

Detta är inget annat än ett bildspel, eller rättare sagt en "carousel". Bara att det ser mer tjusigt ut när bilden ("flödet") är animerad med lite bubblor och sådant.


Bildspel = byter automatiskt bild.
Carousel = byter innehåll (bild/text) när du klickar

Sök efter exempel på valfri carousel i t.ex. CodePen så hittar du "tekniken" bakom det.

Exempel på en "bubbel-knapp" kan se ut som:
<button class="bubbla" data-id="3">
<img src="bild1.gif" id="bildrutan">

Placera knapparna med position absolute, och ha bilden som position relative.
Det har dem också gjort. Du kan se de lekt fram o tillbaka med "top" och "left" för att hitta rätt position (X och Y).

Kod:
const bubbelKnappar = document.querySelectorAll(".bubbla");
bubbelKnappar?.forEach(bubbelKnapp => bubbelKnapp.addEventListener("click", bytbild));

function bytBild(e) {
e.stopImmediatePropagation();
e.preventDefault();
const bubbelId = Number(e.target.dataset.id);
const allImages = ["bild1.gif", "bild2.gif", "bild3.gif", "bild4.gif"];
const bildenDuVillVisa = allImages[bubbelId - 1];

const bildrutan = document.getElementById("bildrutan");
bildrutan?.src = bildenDuVillVisa; 
}

orkar inte formatera eller skriva ordentligt här, men i princip så.
Sen lägger du till att visa rätt textrutan under "processkartan" (bildrutan)

//skrivet på mobil
Om du inte vill använda gif-bilder kan du skapa varje slide på annat sätt. Typ SVG som animeras med CSS. Sen kan du exempelvis Base64-encode varje slide's HTML. lägga de i en array, sen hämta rätt HTML segment, base64-decode det och köra ".innerHTML" istället för ".src" på hela bildrutans container div. Varför base64? Jo för det är mer kompakt.

Kan lägga till att de i just det här fallet använder små mp4-filer. Alltså varje "bild" är en liten filmsnutt på några sekunder som de loopar.
Citera
Idag, 14:33
  #6
Medlem
Rekas avatar
Citat:
Ursprungligen postat av kalkryggar
Kan lägga till att de i just det här fallet använder små mp4-filer. Alltså varje "bild" är en liten filmsnutt på några sekunder som de loopar.

Tack, satt och funderade på om det var animerade GIF-bilder de använde.
Citera
Idag, 14:34
  #7
Medlem
Citat:
Ursprungligen postat av kalkryggar
Kan lägga till att de i just det här fallet använder små mp4-filer. Alltså varje "bild" är en liten filmsnutt på några sekunder som de loopar.

Ja det såg jag nu på datorn. Men principen är densamma. Bara att ha en <video> element istället för <img> exempelvis, sen byta filmsnutt. Hur man gör MP4 filmsnutten i sig kan jag inget om dock

@reka
Har du t.ex. firefox, öppna F12 och gå in i Network tabben.
När du är på sidan. klicka CTRL+F5
Sen klicka på "media" i network-tabben

Där ser du filerna, t.ex.
https://www.btg-bioliquids.com/wp-co...p-1-HD-1-1.mp4
__________________
Senast redigerad av Holzman Idag kl. 14:37.
Citera
Idag, 14:40
  #8
Medlem
Ser nu att de laddar in samtliga videos direkt och stackar de ovanpå varandra. Bubblan du klickar på är den som flyttas längst upp och visas. Dåligt för sidladdningstid men kanske mer smooth transition. Om de istället hade preload varje video och bytt video källan hade det nog varit bättre. Vill man göra det ännu bättre kan du med javascript preload nästkommande klipp. Då sparar du bandbredd och säkerställer en smooth transition, förutsatt att personen alltid går 1 steg framåt i taget.

När du klickar på bubbla 2 så laddar du in video 3 i bakgrunden.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in