De kubus bevat 6 vlakken. Elk vlak is een sectie binnen de kubus. Deze krijgt een class mee en heeft een id.
Deze vlakken zitten in een div met de id kubus.
Deze totale kubus zet je weer in een container-div.
Veel van de realistatie van de kubus ligt in het stijlblad.
Je kunt hierover een en ander lezen in
https://www.webkit.org/blog/386/3d-transforms/
In de ondersteuneende browsers wordt gewerkt met 'perspective".
Bedenk dat er voor de verschillende browsers prefixes vereist zijn.
Wellicht kan http://prefixr.com/ je hierbij van dienst zijn.
De kubus krijgt hoogte een breedte in pixels mee. Firefox heeft problemen met percentages.
Om de 6 vlakken van de kubus ook in 3D te zetten, krijgt de transform-style de waarde preserve-3d mee.
De afmetingen van de vlakken zijn gelijk. Vandaar dat ze in de DOM ook een klasse hebben meegekregen.
Omdat onze vlakken uit afbeeldingen bestaan, geven we ook de opdracht deze passend te maken.
Door de eigenschappen box-sizing: border-box, kun je de vlakken een rand geven zonder dat de buitenafmeting toeneemt.
Het standaard box-model doet dat immers wel. Controleer dit door met de waarden van de dikte van de rand te spelen.
De vlakken van de 'kubus' liggen nu plat, dierect op elkaar. Ze moeten nu zowel gedraaid worden als verschoven.
De verdraaiïng is zowel over de Y-as als over de X-as. De verplaatsing gaat langs de Z-as.
De achterafbeelding wordt bovendien nog 180o gedraaid, zodat hij in dezelfde positie staat als de linker en rechter vlakken.
(In het screenshot is voor elk vlak de stijlregel in 1 regel geschreven.)
Om het resultaat een beetje te kunnen zien wordt ook de hele kubus #kubus even verdraaid en kun je met de verschillende waarden van de afzonderlijke vlakken spelen om te zien of je het begrijpt.
Als het goed is komt de kubus nu in beeld! In dit voorbeeld is de kubus 10 graden over de X-as, 30 graden over de Y-as en 20 graden over de Z-as verdraaid.
Bij dit laatste blijkt het wel erg handig om van http://prefixr.com/ gebruikt te maken.
Als je de laatste stijlregels (44 tot 50) door die alleen voor Chrome/Safari werkt, door Prefixr haalt, krijg je vele stijlregels. Je ziet hironder een deel van die regels.
Het plan is om via een setInterval() de kubus blijvend te laten draaien.
Maak hiervoor een nieuw javascript-document aan en koppel deze aan jouw webpagina.
We amken daar variabelen aan voor de draaiïng over elk van de 3 ruimtelijke assen: draaiX, draaiY en draaiZ.
Ook wordt de variable kubus gedeclareerd, de kubus zal worden. Hij wordt nu buiten fucnties gedeclareerd, zodat ze bruikbaar zijn in de latere fucnties.
Ook wordt een eventListener gemaakt, die controleert of het document geladen is. Daarna kan de kubus-variabele pas gekoppeld worden.
In eerdere tutorials maakten we een window.onload = init declaratie, maar deze werkwijze is natuurlijk net zo elegant.
In de aangeroepen functie wordt met een console.log(kubus) getest of alles werkt. Test dit even. Je krijgt in de console dan de hele div als object.
Omdat de browser zo hun verschillende methoden hebben om de transform-eigenschappen via javascript te laten aansturen, maken we een transform-functie.
Deze functie krijgt een element en een waarde als input en zet deze in de css-eigenschappen van de kubus om.
Voor elke browser contoleert deze omzet functie of de transform-eigenschap herkend wordt.
Als dat het geval is kent hij deze de ingevoegde waaarde toe.
Zo wordt alles afgegaan. Als het niet meer herkend wordt, dan komt er een foutmelding.
De omzet-functie kun je vervolgens in de functie startScript() aanroepen met voorbeeldhoeken:
zetOm(kubus, 'rotateX(10deg) rotateY(20deg) rotateZ(-30deg)');
Probeer hier verschillende hoeken uit:
zetOm(kubus, 'rotateX(-20deg) rotateY(200deg) rotateZ(-30deg)');
zodat je een goed gevoel voor de ruimtelijke weergave van de kubus krijgt. Bedenk dat je de hoeken in een 'string' van drie hoeken opgeeft.
De functie zetOm() moet herhaaldelijk worden aangeroepen, met andere waarden voor de draai-hoeken.
Hiervoor gaan we een functie schrijven, waarin de drie draaihoeken als variablen worden opgehoogd.
Indeze functie worden de variabelen in de zetOm-functie gegooid, waarbij de string 'rotateX(-20deg) rotateY(200deg) rotateZ(-30deg)'
wordt opgeknipt en de getallen daar vervangen worden door de variabelen:
Hierna roep je met een setInterval deze functie herhaaldelijk op.
Je krijgt dan een doorlopend draaiende kubus te zien.
<input type="range" min="-180" max="180">Geef deze input-tag ook een id mee om hem straks in het script te kunnen aanwijzen!
Als de slider voor de x-richting als id bijvoorbeeld schuifjeX heet, dan kun je die met jQuery gewoon selecteren en er een on-change event uitlokken:
$('#schuifjeX').on("change", function() { // hier de opdrachten voor de kubus })In plaats van de opdrachten voor de kubus kun je natuurlijk ook wel een console.log() plaatsen om te testen of het change-event wordt vastgesteld.
draaiingX= $('#schuifjeX').val();de waarde van het schuifje aan de variabele.
zetOm(kubus, 'rotateX(' + draaiX + 'deg) rotateY(' + draaiY + 'deg) rotateZ(' + draaiZ + 'deg)');de kubus naarr de ingevoerde waarde kunnen leiden.
$('#schuifjeX').val();komt een string blijkt te zijn. Asl je daar dan warden aan toevoegt, wordt de string langer en in no-time staat daar 1522222222222222222... of iets dergelijks.
$('#naamId').text(draaiingX)vullen.
draaiingX= parseInt($('#schuifjeX').val());en alles functioneert weer naar behoren.