// INTRO CODE // Simplified from the actual code // VIEW the example and press CTRL U to see the full code // try the parts in a TEMPLATE from https://zimjs.com/code // or the Editor at https://zimjs.com/editor/view/Z_6JD2Q // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // PART 1 - DRAGGING AND ANIMATION new Circle(100, purple) .center() .alp(0) // start at 0 alpha - transparent .animate({alpha:1}, .7) // time is .7 seconds .drag(); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // PART 2 - COMPONENTS AND EVENTS const dial = new Dial() .pos(50, 50) .change(()=>{ slider.value = dial.value; S.update(); // update the stage }); const slider = new Slider() .pos(0, 50, CENTER, BOTTOM) .change(()=>{ dial.value = slider.value; S.update(); }); // can chain on one line too new Button().center().tap(()=>{ zgo("https://zimjs.com"); // in sample it opens a ColorPicker }); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // PART 3 - SQUIGGLE AND PATH ANIMATION const path = new Squiggle({ onTop:false, // do not lift above triangle showControls:false // start with controls hidden }).center(); new Triangle(40,40,40,purple) .rot(90) // aim along the path .addTo() // below is an alternative way to do parameters using the // ZIM DUO technique - a single configuration object // with properties matching parameter names .animate({ props:{path:path}, drag:true // pauses animation and lets user drag // pauseAnimate:false // could override to drag and animate }); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // PART 4 TILES, LOOP AND HIT TESTS // ZIM VEE introduced a Pick class for dynamic parameters // We can pick randomly from an array - like these colors // or in a series from a series(red, green, blue), etc. // or from a range like this {min:10, max:20}, etc. const randomColors = [green, orange, pink, yellow]; // Tile Rectangles 8 cols, 4 rows and horizontal, vertical spacing of 5 const pixels = new Tile(new Rectangle(40,40,randomColors,dark),8,4,5,5) .center(); const eraser = new Rectangle(40,40,grey,darker) .sha() // shadow .pos(150,30,LEFT,BOTTOM) .drag(); // add an event to erase the pixels with the eraser eraser.on("pressmove", ()=>{ // ZIM loop gives each child when looping on a container pixels.loop(pixel=>{ if (eraser.hitTestBounds(pixel)) { pixel.alp(0).animate({ wait:2, props:{alpha:1}, time:.5 }); } }); });
INTRO
ZIM BOOK ZIM BASICS WHY ZIM FIVE MINUTES DEMO TALK CODE ZERO
STARTING LINKS
LEARN EDITOR JAVASCRIPT ZIM SKOOL ZIM KIDS ZIM TIPS MEDIUM