top | item 47188150

(no title)

araes | 2 days ago

Tried this a little bit ago when making a website to try and qualify for the No JS Club inclusion. Wanted to include a bunch of interactive torches that would light when you click on them, and then turn off with subsequent clicks. Grabbed a bunch from the old Geocities gif image archive [1], and then turned them into something similar to this article.

[1] https://gifcities.org/search?q=torch

Part I found a bit difficult was using background images, rather than using <img src""> links, and performing x and y shifting to minimize the use of enormous aspect ratio image files (really long strip of image sideways).

Finally settled on something that looks like:

  .fire_torch2.trch_sprt {
    position: absolute;
    width: 24px;
    height: 53px;
    bottom: 0px;
    left: 0px;
    background-image: url('../items/fire_torch2_sprite.png');
    background-position: 0px 0px;
    background-size: 120px 265px; /* 5 columns * 24px, 5 rows * 53px */
    animation:
      fireTorch2SpriteX 0.55s steps(5) infinite, /* 1 second to complete one row */
      fireTorch2SpriteY 2.75s steps(5) infinite;
    display: none;
  }

  @keyframes fireTorch2SpriteX {
    from { background-position-x: 0; }
    to { background-position-x: -120px; } /* 5 columns * 24px */
  }

  @keyframes fireTorch2SpriteY {
    from { background-position-y: 0; }
    to { background-position-y: -265px; } /* 5 rows * 53px */
  }
Interactivity is handled by using the checkbox hack like so:

  .fire_torch:has( .Lntrn_fire_swtch:checked ) .trch_drk { display: none; }
  .fire_torch:has( .Lntrn_fire_swtch:checked ) .trch_sprt { display: inline-block; }
The part that's weird with background images though, is that you have to set them up with negative (-) background shifts. So the 24px x 53px image actually shifts -120px sideways each time it goes through an x-loop.

Further, since the sprite sheet is actually 120px x 265px to handle 5 rows of 5 frames, it then requires a somewhat complicated @keyframe definition setup. It actually needs one x-loop that's short, and loops endlessly, going through the full 5 frames, and a second 5x step length y-loop that then iterates once every full x-loop.

Actually imagery and animations that can be played with can be found here: https://araesmojo-eng.github.io under "Lantern Tests Menu"

NOTE: Needs the lantern to function and light the torches. Requires other minor puzzles on the website.

discuss

order

No comments yet.