JSFiddle - React, Tailwind, and code Playground
by evpozdniakov
HTML
<div class='transformable ghost'>
<h2>Move me with a matrix</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
</p>
</div>
<div id='move-me' class='transformable'>
<h2>Move me with a matrix</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
</p>
</div>
<script>
var MDN = MDN || {};
MDN.matrixArrayToCssMatrix = function (array) {
return "matrix3d(" + array.join(',') + ")";
}
MDN.multiplyMatrixAndPoint = function (matrix, point) {
//Give a simple variable name to each part of the matrix, a column and row number
var c0r0 = matrix[ 0], c1r0 = matrix[ 1], c2r0 = matrix[ 2], c3r0 = matrix[ 3];
var c0r1 = matrix[ 4], c1r1 = matrix[ 5], c2r1 = matrix[ 6], c3r1 = matrix[ 7];
var c0r2 = matrix[ 8], c1r2 = matrix[ 9], c2r2 = matrix[10], c3r2 = matrix[11];
var c0r3 = matrix[12], c1r3 = matrix[13], c2r3 = matrix[14], c3r3 = matrix[15];
//Now set some simple names for the point
var x = point[0];
var y = point[1];
var z = point[2];
var w = point[3];
//Multiply the point against each part of the 1st column, then add together
var resultX = (x * c0r0) + (y * c0r1) + (z * c0r2) + (w *...
CSS
.transformable {
width:200px;
height:200px;
overflow-y:scroll;
background:#4cc;
padding:10px;
border:2px solid #333;
position:absolute;
top:50%;
left:50%;
margin-left:-100px;
margin-top:-100px;
transition: transform 500ms;
}
.transformable h2 {
margin-top:0;
}
.ghost {
opacity: 0.1;
pointer-events:none;
}
.lesson-title {
position: absolute;
bottom: 0;
left: 0;
margin: 0.7em;
font-family: sans-serif;
font-size: 1em;
color: #888;
font-weight: normal;
}
.lesson-title a {
text-decoration: none;
color: #668;
}
.lesson-title a:hover {
color: #338;
}
JavaScript
/*
A translation matrix is based off the identity matrix. It moves the object in one of 3 directions, x, y, or z. The easiest way to think of a translation is like picking up a coffee cup. The coffee cup must be kept upright and oriented the same way so that no coffee is spilled. It can move up in the air off the table and around the air in space.
Now the coffee can't actually be drank with only a translation matrix because the cup cannot be tilted. In another lesson, a new matrix will be discussed that will be able to handle that task.
*/
var x = 5;
var y = 10;
var z = -100;
var translationMatrix = [
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
x, y, z, 1
];
// Grab the DOM element
var moveMe = document.getElementById('move-me');
// Returns a result like: "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 200, 0, 1);"
var matrix3dRule = MDN.matrixArrayToCssMatrix( translationMatrix );
// Set the transform
moveMe.style.transform = matrix3dRule;