<svg xmlns="http://www.w3.org/2000/svg" style="position: absolute; left: -9999px;">
    <defs>
    <linearGradient x1="49.9618961%" y1="100.171922%" x2="50.1943301%" y2="-0.605268409%" id="linearGradient-4">
      <stop stop-color="#82CBAC" offset="0%"></stop>
      <stop stop-color="#006838" offset="100%"></stop>
    </linearGradient>
  </defs>
      <symbol id="geyser" viewBox="0 0 118 106">
      <path style="opacity: 0" class="gsmoke" d="M42.1928517,64.8261864 C42.1928517,64.8261864 39.6937643,68.9359322 37.5895057,69.1739831 C37.5895057,69.1739831 32.7124715,72.0934746 31.4606844,68.9134746 C31.4606844,68.9134746 30.1909506,67.6783051 27.3688213,67.8714407 C27.3688213,67.8714407 22.6847148,64.2198305 27.7860837,61.2958475 C27.7860837,61.2958475 21.1771863,56.5707627 26.1439544,54.1094068 C26.1439544,54.1094068 32.2189354,46.1234746 37.221597,50.8036441 C37.221597,50.8036441 42.5697338,52.6002542 38.5406844,55.744322 C38.5406844,55.744322 35.8486692,56.5662712 36.7774144,59.009661 C36.7774144,59.009661 42.5562738,60.0157627 42.1973384,64.8486441" id="g-smoke-3" fill="#F1EFEF"></path>
      <path style="opacity: 0" class="gsmoke" d="M90.5324715,61.2105085 C90.5324715,61.2105085 92.1387072,66.8563559 86.9431179,67.3998305 C86.9431179,67.3998305 82.6987072,66.3488136 83.9504943,63.685339 C83.9504943,63.685339 82.1019772,65.5313559 81.4469202,63.3439831 C81.4469202,63.3439831 77.4088973,58.7222034 80.5495817,56.7863559 C80.5495817,56.7863559 81.6174144,55.2008475 80.8726236,52.2409322 C80.8726236,52.2409322 83.8562738,46.5681356 87.9346768,51.4279661 C87.9346768,51.4279661 92.3720152,50.9788136 88.791635,48.3333051 C88.791635,48.3333051 91.690038,43.5049153 95.2749049,48.3063559 C95.2749049,48.3063559 104.921293,53.2470339 100.905703,59.4318644 C100.905703,59.4318644 100.008365,65.4505085 95.9120152,61.7764407 C95.9120152,61.7764407 94.5256274,59.0815254 92.1073004,60.5277966 L90.5324715,61.2105085 Z" id="g-smoke-2" fill="#F1EFEF"></path>
      <path style="opacity: 0" class="gsmoke" d="M61.3644867,9.20762712 C61.3644867,9.20762712 55.5721673,5.73567797 59.5698099,1.25762712 C59.5698099,1.25762712 63.9892015,-1.14983051 65.0211407,2.03915254 C65.0211407,2.03915254 65.133308,-0.934237288 67.4080608,0.386271186 C67.4080608,0.386271186 74.4476806,1.12288136 73.3125475,5.16525424 C73.3125475,5.16525424 73.6535361,7.31669492 76.6057795,9.20762712 C76.6057795,9.20762712 78.535057,16.250339 71.266616,15.3520339 C71.266616,15.3520339 67.8612167,19.1563559 72.9715589,18.5994068 C72.9715589,18.5994068 74.3175665,24.8875424 67.5067681,23.6388983 C67.5067681,23.6388983 55.4824335,26.9985593 54.0063118,18.6982203 C54.0063118,18.6982203 50.0311027,12.9894915 56.3932319,12.8592373 C56.3932319,12.8592373 59.6864639,14.0360169 60.5927757,10.9548305 L61.3644867,9.20762712 Z" id="g-smoke-1" fill="#F1EFEF"></path>
      <ellipse id="pr1" class="projectiles" fill="#DCDBDB" cx="48.0704183" cy="34.355678" rx="4.78730038" ry="4.79245763"></ellipse>
      <ellipse id="pr2" class="projectiles" fill="#DCDBDB" cx="44.0638023" cy="39.3412712" rx="1.8530038" ry="1.855"></ellipse>
      <ellipse id="pr3" class="projectiles" fill="#DCDBDB" cx="50.15673" cy="47.9874576" rx="1.81711027" ry="1.8190678"></ellipse>
      <ellipse id="pr4" class="projectiles" fill="#DCDBDB" cx="49.3491255" cy="65.4505085" rx="1.4581749" ry="1.45974576"></ellipse>
      <ellipse id="pr5" class="projectiles" fill="#DCDBDB" cx="71.5044106" cy="45.0095763" rx="1.78570342" ry="1.78762712"></ellipse>
      <ellipse id="pr6" class="projectiles" fill="#DCDBDB" cx="61.8759696" cy="33.5202542" rx="1.57034221" ry="1.5720339"></ellipse>
      <ellipse id="Oval" class="geyser-balls" fill="#DCDBDB" cx="50.9777947" cy="36.3364407" rx="12.0153612" ry="12.0283051"></ellipse>
      <ellipse id="Oval" class="geyser-balls" fill="#DCDBDB" cx="59.8749049" cy="41.6499153" rx="7.28190114" ry="7.28974576"></ellipse>
      <ellipse id="Oval" class="geyser-balls" fill="#DCDBDB" cx="69.4629658" cy="49.3483898" rx="7.43893536" ry="7.44694915"></ellipse>
      <polygon id="geyser-shoot" fill="#DCDBDB" points="76.7089734 48.050339 73.3170342 85.3973729 47.4422814 85.3973729 45.4322433 46.469322"></polygon>
      <ellipse id="Oval" class="geyser-balls" fill="#DCDBDB" cx="74.6450951" cy="54.5720339" rx="3.57140684" ry="3.57525424"></ellipse>
      <ellipse id="Oval" class="geyser-balls" fill="#DCDBDB" cx="65.7659316" cy="38.6495763" rx="10.095057" ry="10.1059322"></ellipse>
      <ellipse id="Oval" class="geyser-balls" fill="#DCDBDB" cx="50.318251" cy="56.1395763" rx="7.76646388" ry="7.77483051"></ellipse>
      <ellipse id="Oval" class="geyser-balls" fill="#DCDBDB" cx="46.7872243" cy="64.5072881" rx="3.07787072" ry="3.08118644"></ellipse>
      <ellipse id="Oval" class="geyser-balls" fill="#DCDBDB" cx="73.9855513" cy="59.8540678" rx="4.25787072" ry="4.26245763"></ellipse>
      <path d="M0.237794677,101.521949 L0.659543726,101.292881 L43.6869202,77.815678 C43.6869202,77.815678 57.295057,85.9902542 76.7897338,77.5461864 L117.98654,100.560763 C117.98654,100.560763 62.8944487,111.565 1.71391635,101.508475 L0.237794677,101.521949 Z" id="Shape" fill="url(#linearGradient-4)"></path>
    </symbol>
</svg>

<div class="container">
  <div class="row">
     <!-- Height is a bit larger to prevent animation from being cut out -->
    <svg viewBox="0 0 118 160" width="200px" height="500px">
      <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#geyser"></use>
    </svg>
  </div>
</div>
html, body {
    height: 100%;
}

body {
  margin: 0;
  background: #76c5dd;
}

.container {
  height: 100%;
  padding: 0;
  margin: 0;
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  align-items: center;
  justify-content: center;
}

.row {
    width: auto;
}

svg, use {
  display: block;
}
var geyserBalls = document.getElementsByClassName('geyser-balls');
var smoke1 = document.getElementById('g-smoke-1');
var smoke2 = document.getElementById('g-smoke-2');
var smoke3 = document.getElementById('g-smoke-3');
var pr = document.getElementById('pr2');
var projectiles = document.getElementsByClassName('projectiles');
var timeline = new TimelineMax({ repeat: -1, repeatDelay: 0 });

TweenMax.to(
  projectiles[1],
  0.9,
  {
    scale: 2.5,
    x: Math.cos(30) * 10 * 6,
    y: Math.sin(30) * 10 * 6,
    repeat: -1
  }
)

TweenMax.to(
  projectiles[2],
  0.9,
  {
    scale: 4,
    x: Math.cos(80) * 50 * 6,
    y: Math.sin(300) * 10 * 6,
    repeat: -1
  }
)

TweenMax.to(
  projectiles[3],
  0.9,
  {
    scale: 2.5,
    x: Math.cos(100) * 10 * 6,
    y: Math.sin(80) * 10 * 6,
    repeat: -1
  }
)

TweenMax.to(
  projectiles[4],
  0.9,
  {
    scale: 1.3,
    x: Math.cos(-50) * 10 * 6,
    y: Math.sin(-50) * 10 * 6,
    repeat: -1
  }
)

TweenMax.staggerFromTo(
  geyserBalls,
  0.05,
  {
    y: '-2px',
    ease: Power1.ease
  },
  {
    y: '2px',
    repeat: -1,
    yoyo: true,
    ease: Power1.ease
  }
)

timeline.fromTo(
  smoke1,
  2.3,
  {
    scale: 0,
    x: '-10px',
    y: '50px',
    opacity: 0.8,
    ease: Power1.easeInOut
  },
  {
    scale: 2,
    opacity: 0,
    y: '-15px',
    ease: Power1.easeInOut
  }
).fromTo(
  smoke2,
  2.3,
  {
    scale: 0,
    x: '-30px',
    y: '-10px',
    opacity: 0.8,
    ease: Power1.easeInOut
  },
  {
    scale: 2,
    opacity: 0,
    y: '-60px',
    ease: Power1.easeInOut
  },
  '-=1.9'
).fromTo(
  smoke3,
  2.3,
  {
    scale: 0,
    x: '20px',
    y: '-10px',
    opacity: 0.8,
    ease: Power1.easeInOut
  },
  {
    scale: 2.2,
    opacity: 0,
    y: '-70px',
    ease: Power1.easeInOut
  },
  '-=2.1'
)

timeline.timeScale(1.2)

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.1/TweenMax.min.js