Ez az oldal nem koncepció, hanem futó kód. Ami itt látszik, az bemásolható a kamadochef.com főoldalába. Alul ott a pontos ok, amiért a CSS-elforgatásos út nem hozható tökéletesre, és mi kell a valódi 3D-s fedélnyitáshoz.
Desktopon vidd rá a kurzort, mobilon egyszerűen görgess ide. Ugyanaz a két trigger, amit Beatrix is megírt, csak nem egy lapos képet döntünk meg, hanem két HIVATALOS stúdiófotó között úsztatunk át: csukott fedél és nyitott fedél. Minden pixel valódi termék.
Ennyi az egész. Nincs benne könyvtár, nincs benne build, és nem tölt be semmit külső helyről.
<!-- HTML: two stacked images inside one figure --> <div class="kc"> <figure> <img class="closed" src="19red_main.jpg" alt="..."> <img class="open" src="19red_open.jpg" alt="..." loading="lazy"> </figure> </div> /* CSS: stack them, fade the top one out */ .kc figure{position:relative;aspect-ratio:1200/848} .kc figure img{position:absolute;inset:0;width:100%;height:100%; object-fit:contain;transition:opacity .45s cubic-bezier(.22,.61,.36,1)} .kc figure img.open{opacity:0} /* desktop: hover. Guarded so touch devices never get a stuck hover state. */ @media (hover:hover){ .kc:hover figure img.closed{opacity:0} .kc:hover figure img.open {opacity:1} } /* mobile: the observer below adds .seen when the card scrolls into view */ .kc.seen figure img.closed{opacity:0} .kc.seen figure img.open {opacity:1} // JS: mobile only, opens the lid when the card is ~55% visible. // It keeps .seen (does not toggle back), so the lid stays open once reached. if (!window.matchMedia('(hover:hover)').matches) { const io = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('seen'); io.unobserve(e.target); } }); }, { threshold: 0.55 }); document.querySelectorAll('[data-kc]').forEach(el => io.observe(el)); }
A @media (hover:hover) nélkül érintőképernyőn beragad a hover-állapot, és a fedél
nyitva marad az első koppintás után. A loading="lazy" pedig csak a nyitott képen legyen rajta,
a csukotton ne, mert az a hajtás fölött van.
Kilenc modell van kész, forgatható és zoomolható, desktopon és mobilon egyaránt.
Nem kell hozzá új fejlesztés, csak be kell emelni. Az AR kódban be van kötve mind a kilencre
(ios-src + ar-modes="webxr scene-viewer quick-look"), és az USDZ-fájlok is
ott vannak.
Két dolgot megmértem az USDZ-fájlokon, és mindkettő ellene szól annak, hogy a Quick Look ma elindul: (1) a fájlon belüli bejegyzések nincsenek 64 bájtra igazítva, amit az Apple USDZ-specifikációja megkövetel; (2) a textúrák WebP formátumúak, a Quick Look viszont PNG-t és JPEG-et vár. Ez mind a négy megvizsgált modellnél ugyanígy van. Egy kollégánk jelezte is korábban, hogy nála nem indult el. Amíg ez nincs lezárva, az AR „elő van készítve", nem pedig „működik". És ha tesztelitek: iPhone-on Safariban kell megnyitni, mert a Telegram és a Messenger beépített böngészőjében a Quick Look nem indul.
A teljes, több modellt és színváltozatot kezelő oldal: kamadochef-3d.pages.dev
<script type="module" src="https://unpkg.com/@google/model-viewer@3.5.0/dist/model-viewer.min.js"></script>
<model-viewer src="model.glb" ios-src="model.usdz" ar ar-modes="webxr scene-viewer quick-look"
camera-controls touch-action="pan-y"
shadow-intensity="1" exposure="1.05"></model-viewer>
Megnéztem a kc_lidopen.html-t. A technika ez volt: egy beágyazott PNG-re
transform: translateY(-8%) rotateX(26deg), hover és IntersectionObserver triggerrel. A triggerek jók,
a probléma egy szinttel lejjebb van.
Ez is járható út, csak nem a mostani fájlokból. Megmértem a kilenc GLB-t: mindegyikben 0 animáció van, és összesen 2 node, vagyis a fedél nincs külön geometriaként leválasztva. Ahhoz, hogy nyíljon, három dolog kell.
lid_open néven.<model-viewer animation-name="lid_open">, és hoverre/görgetésre
modelViewer.play({repetitions:1}).A mostani modellek nyitott felületek, nem zárt testek: a 22 colos fájlban 58 831 pont és 100 263 lap mellett 16 669 perem-él van. Ez azt jelenti, hogy a grillnek nincs megmodellezve a belseje. Ha a fedelet felnyitnánk, nem a rács és a tűztér bukkanna elő, hanem egy üres héj. Vagyis a zsanéros nyitáshoz nem elég szétvágni a meglévő modellt, kell hozzá egy belsővel együtt modellezett példány. Ez ugyanaz a hiányzó-információ probléma, mint a lapos fotónál, csak három dimenzióban.
A belsővel együtt modellezett, nagy felbontású példány a gyártói CAD megérkezésére vár. Addig a fenti fotós megoldás az, ami ma élesíthető, és ez egybevág azzal, amit Beatrix is írt: amíg a forgós kép nem élethű, addig maradjon a sima termékkép.