cat bounce | new rainbow cats

buttons, resize, audio

by endlessanimal

HTML

<script src="https://3681a2d2784956323369-b57f388ffba74a9d5600392ce75da4b1.ssl.cf2.rackcdn.com/cats/pathseg.js"></script>
<script src="https://3681a2d2784956323369-b57f388ffba74a9d5600392ce75da4b1.ssl.cf2.rackcdn.com/cats/decomp.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/matter-js/0.12.0/matter.min.js"></script>
<div class="toggl">

  <div id="wobble" class="italic">CAT &nbsp;BOUNCE</div>

  <div class="links_list">

    <div id="social" class="sosh">
      <div class="fb-like" data-href="http://www.cat-bounce.com" data-layout="button_count" data-action="like" data-size="small" data-show-faces="false" data-share="true"></div> <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://cat-bounce.com" data-text="CAT BOUNCE! by @endlessanimal:">Tweet</a>

      <script>
        ! function(d, s, id) {
          var js, fjs = d.getElementsByTagName(s)[0];
          if (!d.getElementById(id)) {
            js = d.createElement(s);
            js.id = id;
            js.src = "https://platform.twitter.com/widgets.js";
            fjs.parentNode.insertBefore(js, fjs);
          }
        }(document, "script", "twitter-wjs");

      </script>

    </div>

</div>

</div>

    <button id="makeItRainbow" class="btn italic" style="display:none;">  
<span class="txt anim-text-flow-hover italic">Make It Rainbow</span>
</button>
    <button id="makeItRain" class="btn italic">
<span class="txt anim-text-flow-hover">Make It Rain</span>
</button>
    <audio id="audio2">
  <source src="https://3681a2d2784956323369-b57f388ffba74a9d5600392ce75da4b1.ssl.cf2.rackcdn.com/cats/sound_2.ogg" type="audio/ogg">
  <source src="http://aa8f47fcc01b7584f779-b57f388ffba74a9d5600392ce75da4b1.r13.cf2.rackcdn.com/cats/sound_2.mp3" type="audio/mpeg">
  Your browser does not support the audio element.
</audio>
    <audio id="audio1">
  <source src="https://3681a2d2784956323369-b57f388ffba74a9d5600392ce75da4b1.ssl.cf2.rackcdn.com/cats/sound_1.ogg"...

SCSS

body {
  overflow: hidden;
  margin: 0px;
  width: 100vw;
  height: 100vh;
  background: -webkit-gradient(linear, left top, left bottom, from(#ef31f9), to(rgba(125, 185, 232, 0)));
  background: linear-gradient(180deg, #ef31f9, rgba(125, 185, 232, 0));
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#ef31f9", endColorstr="#007db9e8", GradientType=0)
}

body,
html {
  height: 100vh;
  width: 100vw;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
    padding: 0;
  margin: 0;
  overflow: hidden;
     font-family: "Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace;
}

.btn {
  position: fixed;
  top: 0;
  margin: 1rem;
  -webkit-appearance: none;
  border: none;
  outline: none;
  padding: 10px 20px;
  cursor: pointer;
  background: none;
  color: #fff;
  font-weight: 900;
  text-transform: uppercase;
  font-size: 0.5rem;
     font-family: "Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace;
}

#makeItRain {
  right: 0;
}

#makeItRainbow {
  left: 0;
}

/* SMARTPHONES LANDSCAPE */
@media only screen and (min-width: 414px) {
  .btn {
    font-size: 1.5rem;
  }
}

/*
 * Animation module with all animation code
 */

.anim-text-flow,
.anim-text-flow-hover:hover {
  /*
   * Animation variables
   */
  $animationSteps: 250;
  $animationDuration: 10;
  $animationElement: span;
  $animationElementsCount: 100;
  $delayBetweenLetters: 0.1;
  /*
   * Elements settings
   */
  #{$animationElement} {
    animation-name: anim-text-flow-keys;
    animation-duration: #{$animationDuration}s;
    animation-iteration-count: infinite;
    animation-direction: alternate;
    animation-fill-mode: forwards;
  }
  /*
   * Keyframe loop
   */
  @keyframes anim-text-flow-keys {
    @for $i from 0 through $animationSteps {
      #{percentage($i * (1 / $animationSteps))} {
        color: hsla(random(365), 60, 60, 1);
      }
    }
  }
  /*
   * Element animation delay loop
   */
 ...

Babel + JSX

// WOBBLER

const speed=150; // speed of wobbling, lower is faster
const wobbleheight=3; // height of wobbling in pixels
const alink=""; // page to link text to (set to ="" for no link)

/**********************************

*  Wobbly Text Effect    
*  by http://www.mf2fm.com/rv

**********************************/

let wobtxt;

let wobble;
let wobcnt=0;
window.onload=() => { if (document.getElementById) {
  let i;
  let wobli;
  wobble=document.getElementById("wobble");
  wobtxt=wobble.firstChild.nodeValue;
  while (wobble.childNodes.length) wobble.removeChild(wobble.childNodes[0]);
  for (i=0; i<wobtxt.length; i++) {
    wobli=document.createElement("span");
    wobli.setAttribute("id", `wobb${i}`);
    wobli.style.position="relative";
    wobli.appendChild(document.createTextNode(wobtxt.charAt(i)));
    if (alink) {
      wobli.style.cursor="pointer";
      wobli.onclick=() => { top.location.href=alink; }
    }
    wobble.appendChild(wobli);
  }
  setInterval("wobbler()", speed);
}}

function wobbler() {
  for (let i=0; i<wobtxt.length; i++) document.getElementById(`wobb${i}`).style.top=`${Math.round(wobbleheight*Math.sin(i+wobcnt))}px`
  wobcnt++;
}

const cats = [
  "https://3681a2d2784956323369-b57f388ffba74a9d5600392ce75da4b1.ssl.cf2.rackcdn.com/cats/cat_1.png",
  "https://3681a2d2784956323369-b57f388ffba74a9d5600392ce75da4b1.ssl.cf2.rackcdn.com/cats/cat_2.png",
  "https://3681a2d2784956323369-b57f388ffba74a9d5600392ce75da4b1.ssl.cf2.rackcdn.com/cats/cat_3.png",
  "https://3681a2d2784956323369-b57f388ffba74a9d5600392ce75da4b1.ssl.cf2.rackcdn.com/cats/cat_4.png",
  "https://3681a2d2784956323369-b57f388ffba74a9d5600392ce75da4b1.ssl.cf2.rackcdn.com/cats/cat_5.png",
  "https://3681a2d2784956323369-b57f388ffba74a9d5600392ce75da4b1.ssl.cf2.rackcdn.com/cats/cat_6.png"
];
const rainbow_cats = [
  "https://3681a2d2784956323369-b57f388ffba74a9d5600392ce75da4b1.ssl.cf2.rackcdn.com/cats/rainbow/cat_1.png",
 ...