moving-mondrian

Randomly generated animated images in the style of Piet Mondrian  https://p.ce9e.org/moving-mondrian/
git clone https://git.ce9e.org/moving-mondrian.git

commit
8c1e157030a8a686405068a020095c7e6fde4389
parent
c1eae40cc27c0ac105b070196887aefff25534da
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-05-10 19:04
add easing function

Diffstat

M mondrian.js 23 ++++++++++++++++-------

1 files changed, 16 insertions, 7 deletions


diff --git a/mondrian.js b/mondrian.js

@@ -1,4 +1,4 @@
    1    -1 var speed = 2;  // percent per second
   -1     1 var speed = 3;  // percent per second
    2     2 
    3     3 var createLeaf = function() {
    4     4 	var element = document.createElement("div");
@@ -25,6 +25,14 @@ var getRelSize = function(element) {
   25    25 	return getSize(element) / getSize(root);
   26    26 }
   27    27 
   -1    28 var easing = function(x) {
   -1    29 	return (Math.pow(x * 2 - 1, 3) + 1) / 2;
   -1    30 };
   -1    31 
   -1    32 var easing_inverse = function(y) {
   -1    33 	return (Math.cbrt(y * 2 - 1) + 1) / 2;
   -1    34 };
   -1    35 
   28    36 var animate = function(element, delta) {
   29    37 	if (element.children.length) {
   30    38 		for (var i = 0; i < element.children.length; i++) {
@@ -32,21 +40,22 @@ var animate = function(element, delta) {
   32    40 		}
   33    41 
   34    42 		var pos = parseFloat(element.style.getPropertyValue("--pos"));
   -1    43 		var x = easing_inverse(pos);
   35    44 		if (element.dataset.grow) {
   36    -1 			pos += delta / 1000 / 100 * speed;
   37    -1 			if (pos >= 1){
   -1    45 			x += delta / 1000 / 100 * speed;
   -1    46 			if (x >= 1){
   38    47 				element.before(element.children[0]);
   39    48 				element.remove();
   40    49 			} else {
   41    -1 				element.style.setProperty("--pos", pos);
   -1    50 				element.style.setProperty("--pos", easing(x));
   42    51 			}
   43    52 		} else {
   44    -1 			pos -= delta / 1000 / 100 * speed;
   45    -1 			if (pos <= 0){
   -1    53 			x -= delta / 1000 / 100 * speed;
   -1    54 			if (x <= 0){
   46    55 				element.before(element.children[1]);
   47    56 				element.remove();
   48    57 			} else {
   49    -1 				element.style.setProperty("--pos", pos);
   -1    58 				element.style.setProperty("--pos", easing(x));
   50    59 			}
   51    60 		}
   52    61 	} else if (Math.random() < delta / 1000 * getRelSize(element)){