Spinning Wheel

Spinning Wheel Javascript

by Roshan Karunarathna

HTML

<div class="container">
  <div class="header">
    <h1>SPIN</h1>

  </div>
  <div class="container-section">
    <div class="overall-round-container">
      <div class="overall-round-section"  id="spinnner"><div class="spin-bar"><span>1</span></div><div class="spin-bar"><span>2</span></div><div class="spin-bar"><span>3</span></div><div class="spin-bar"><span>4</span></div><div class="spin-bar"><span>5</span></div><div class="spin-bar"><span>6</span></div><div class="spin-bar"><span>7</span></div><div class="spin-bar"><span>8</span></div><div class="spin-bar"><span>9</span></div><div class="spin-bar"><span>10</span></div></div>
    <p id="spinValueText">0</p>
    </div>

  </div>
  <div class="footer">
    <div class="nav-section">
      <a id="spin" onclick="spinning()" href="javascript:void(0);">Spin</a>
    </div>
  </div>
</div>

CSS

html,
body {
  padding: 0;
  margin: 0;
  color: #fff;
  font-family: sans-serif;
}

h1 {
  margin: 0;
  padding: 0 0 30px 0;
}

.container {
  width: 100%;
  background-color: #5d5d5d;
  padding: 30px 0;
}

.header,
.footer {
  width: 100%;
  height: auto;
  text-align: center;
}

a#spin {
  font-size: 18px;
  text-decoration: none;
  text-transform: uppercase;
  display: inline-block;
  background-color: #910033;
  color: #fff;
  padding: 13px 40px 10px;
  border-radius: 4px;
  box-shadow: 0 0 0 4px #910033 inset, 0 0 0 5px #c16485 inset, 0 0 3px 0px rgba(0, 0, 0, 0.5);
}

.container-container {
  width: auto;
  height: auto;
  background-color: #132D59;
  margin: 0 auto;
  position: relative;
}

.overall-round-section {
  background: conic-gradient(#E65100 10%, #827717 0 20%, #33691E 0 30%, #1B5E20 0 40%, #004D40 0 50%, #01579B 0 60%, #1A237E 0 70%, #4A148C 0 80%, #880E4F 0 90%, #B71C1C 0 100%, red 0);
  width: 200px;
  height: 200px;
  border-radius: 50%;
  margin: 0 auto;
  position: relative;
  transition: all 10s cubic-bezier(0, 0.29, 0.3, 1.03) 0ms;
  overflow: hidden;
}

.overall-round-container {
  position: relative;
  width: 200px;
  height: 200px;
  border-radius: 50%;
  margin: 0 auto;
  box-shadow: 0px 0px 5px 1px rgba(0, 0, 0, 0.5);
  border: 1px solid rgba(255, 255, 255, 0.1);
}

.overall-round-container::before {
  content: "";
  position: absolute;
  top: 50%;
  margin-top: -3px;
  left: -8px;
  border-width: 5px 0 5px 15px;
  border-style: solid;
  border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #fff;
  z-index: 10;
}

.overall-round-container::after {
  content: "";
  position: absolute;
  width: 40px;
  height: 40px;
  background-color: #fff;
  border-radius: 50%;
  left: 50%;
  top: 50%;
  margin-left: -20px;
  margin-top: -20px;
  box-shadow: 0px 0px 5px 1px rgba(0, 0, 0, 0.5);
}

.overall-round-section .spin-bar {
  position: absolute;
  top: 0;
  width: 62px;
  background-color: rgba(255, 255, 255, 0.03);
  left: 50%;
 ...

JavaScript

var button = document.getElementById("spin");
var spinnner = document.getElementById("spinnner");
var spinnnerValue = document.getElementById("spinValueText");
var spinnnerBarNodes = spinnner.childNodes;
var spinnnerBarCount = spinnner.childElementCount;
var y = 1;
var spinnnerBarDeg = 360 / spinnnerBarCount;
var spinnnerBarsDeg = 0;

for (var i = 0; i < spinnnerBarCount; i++) {
  spinnnerBarDeg = parseInt(spinnnerBarDeg);
  spinnnerBarsDeg = (spinnnerBarDeg * (i + 3)) + 18;
  spinnnerBarsDeg = "rotate(-" + spinnnerBarsDeg + "deg)";
  spinnnerBarNodes[i].style.transform = spinnnerBarsDeg;
}

function spinning() {
  spinnnerValue.classList.remove("ShowValue");
  var x = Math.floor((Math.random() * 10) + 1);
  var deg = 0;
  if (y % 2 == 0) {
    deg = (x * 36) + 1080;
  } else {
    deg = (x * 36) - 1080;
  }
  deg = "rotate(" + deg + "deg)";
  spinnner.style.transform = deg;
  y++;

  setTimeout(function() {
    spinnnerValue.innerHTML = x;
    spinnnerValue.className = "ShowValue";
  }, 2400);
}