<main>
  <h2>CSS Animations: the <code>steps()</code> Function</h2>

  <p>Use the inputs below to set the values for a steps-based timing function.</p>

  <div class="box">
  </div>
  
  <label for="steps1">steps(</label>
  <input id="steps1" type="number" step="1">, 
  <select id="steps2">
    <option value=""></option>
    <option value=", jump-start">jump-start</option>
    <option value=", jump-end">jump-end</option>
    <option value=", jump-none">jump-none</option>
    <option value=", jump-both">jump-both</option>
    <option value=", start">start</option>
    <option value=", end">end</option>
  </select> )

  <br>

  <button>Animate the Box</button> <button disabled>Reset</button>

</main>
body {
  font-family: Arial, sans-serif;
  font-size: 20px;
  padding: 0 20px;
}

main {
  text-align: center;
  margin: 0 auto;
  max-width: 800px;
}

p {
  padding: 0 20px;
}

code {
  color: firebrick;
}

.box {
  width: 50px;
  height: 50px;
  background: rebeccapurple;
  border: solid 2px;
  margin-bottom: 20px;
}

.box-animate {
  animation-name: moveObject;
  animation-duration: 2s;
  animation-fill-mode: forwards;
}

@keyframes moveObject {
  from {
    transform: translateX(0);
  }

  to {
    transform: translateX(600px);
  }
}

input[type=number] {
  width: 60px;  
}

button {
  margin-top: 20px;
}
console.clear();

let myObject = document.querySelector('.box'),
    btn1 = document.querySelector('button'),
    btn2 = document.querySelectorAll('button')[1],
    steps1 = document.querySelector('#steps1'),
    steps2 = document.querySelector('#steps2');

btn1.addEventListener('click', function () {
  myObject.style.animationTimingFunction = `
    steps(${steps1.value}${steps2.value})
  `;
  myObject.classList.add('box-animate');
  this.disabled = true;
  btn2.disabled = false;
}, false);

btn2.addEventListener('click', function () {
  myObject.classList.remove('box-animate');
  this.disabled = true;
  btn1.disabled = false;
}, false);

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.