Using emojis randomly pulled from a txt file, I filled the cloud grid and rendered it on an html canvas.
By random chance, or when the mouse is inside a cloud cell, I pushed the emoji into a separate list to drop and replaced the emoji at that cell.
Emojis on the list to drop are repositioned in every frame with gravitational force, random horizontal movement, and repelling force near the mouse, and are deleted when they reach the bottom of the canvas.
* how the drip canvas works *
With every frame drawn on the emoji cloud canvas, the bottommost row of pixels is copied onto the topmost row of the drip canvas.
The drip canvas copies each pixel row downward using two alternating buffers, creating a downward 'drip' effect.
In the process of copying, each pixel is blurred with its neighboring pixels, diffused with the pixel above it, and decayed slightly to simulate the spreading and drying of ink on paper.
The canvas is then blended with a paper texture and adjusted with transparency in wet areas to generate the final visual output.