Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTML - How do I generate a progress bar circle with a percentage in and set the value with JS or jQuery? [closed]

I need to have a circular progress bar which I can use to show a user what percent they got in a test. Ideally, there would be some fixed HTML and then change the value in the JavaScript or jQuery. They could look like any of the circles below. like thisre


Thank you in advance.

like image 836
Benjamin Sommer Avatar asked Oct 24 '25 23:10

Benjamin Sommer


2 Answers

You might be looking for this one

var svg ;

function drawProgress(end){ 
d3.select("svg").remove() 
  if(svg){
  svg.selectAll("*").remove();
  
}
var wrapper = document.getElementById('radialprogress');
var start = 0;
 
var colours = {
  fill: '#FF0000',
  track: '#555555',
  text: '#00C0FF',
  stroke: '#FFFFFF',
}

var radius = 80;
var border = 12;
var strokeSpacing = 4;
var endAngle = Math.PI * 2;
var formatText = d3.format('.0%');
var boxSize = radius * 2;
var count = end;
var progress = start;
var step = end < start ? -0.01 : 0.01;

//Define the circle
var circle = d3.svg.arc()
  .startAngle(0)
  .innerRadius(radius)
  .outerRadius(radius - border);

//setup SVG wrapper
svg = d3.select(wrapper)
  .append('svg')
  .attr('width', boxSize)
  .attr('height', boxSize);

  
// ADD Group container
var g = svg.append('g')
  .attr('transform', 'translate(' + boxSize / 2 + ',' + boxSize / 2 + ')');

//Setup track
var track = g.append('g').attr('class', 'radial-progress');
track.append('path')
  .attr('fill', colours.track)
  .attr('stroke', colours.stroke)
  .attr('stroke-width', strokeSpacing + 'px')
  .attr('d', circle.endAngle(endAngle));

//Add colour fill
var value = track.append('path')
  .attr('fill', colours.fill)
  .attr('stroke', colours.stroke)
  .attr('stroke-width', strokeSpacing + 'px');

//Add text value
var numberText = track.append('text')
  .attr('fill', colours.text)
  .attr('text-anchor', 'middle')
  .attr('dy', '.5rem'); 

  //update position of endAngle
  value.attr('d', circle.endAngle(endAngle * end));
  //update text value
  numberText.text(formatText(end));
  
}

$('#submitClick').click(function(){
  var val = parseInt($('#percent').val());
   drawProgress(val/100)
})
 
drawProgress(10/100)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
 

<label for="percent">Type a percent!</label>
<input id="percent" name="percent" value=10>
<button id='submitClick' name='submitButton' >Render</button>


<div id="radialprogress" 
</div> 
like image 158
G_S Avatar answered Oct 27 '25 12:10

G_S


Progress bar Circle using HTML5 and CSS3

@import url(https://fonts.googleapis.com/css?family=Lato:700);
*,
*:before,
*:after {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

html,
body {
  background: #ecf0f1;
  color: #444;
  font-family: 'Lato', Tahoma, Geneva, sans-serif;
  font-size: 16px;
  padding: 10px;
}

.set-size {
  font-size: 10em;
}

.charts-container:after {
  clear: both;
  content: "";
  display: table;
}

.pie-wrapper {
  height: 1em;
  width: 1em;
  float: left;
  margin: 15px;
  position: relative;
}

.pie-wrapper:nth-child(3n+1) {
  clear: both;
}

.pie-wrapper .pie {
  height: 100%;
  width: 100%;
  clip: rect(0, 1em, 1em, 0.5em);
  left: 0;
  position: absolute;
  top: 0;
}

.pie-wrapper .pie .half-circle {
  height: 100%;
  width: 100%;
  border: 0.1em solid #3498db;
  border-radius: 50%;
  clip: rect(0, 0.5em, 1em, 0);
  left: 0;
  position: absolute;
  top: 0;
}

.pie-wrapper .label {
  background: #34495e;
  border-radius: 50%;
  bottom: 0.4em;
  color: #ecf0f1;
  cursor: default;
  display: block;
  font-size: 0.25em;
  left: 0.4em;
  line-height: 2.6em;
  position: absolute;
  right: 0.4em;
  text-align: center;
  top: 0.4em;
}

.pie-wrapper .label .smaller {
  color: #bdc3c7;
  font-size: .45em;
  padding-bottom: 20px;
  vertical-align: super;
}

.pie-wrapper .shadow {
  height: 100%;
  width: 100%;
  border: 0.1em solid #bdc3c7;
  border-radius: 50%;
}

.pie-wrapper.style-2 .label {
  background: none;
  color: #7f8c8d;
}

.pie-wrapper.style-2 .label .smaller {
  color: #bdc3c7;
}

.pie-wrapper.progress-30 .pie .right-side {
  display: none;
}

.pie-wrapper.progress-30 .pie .half-circle {
  border-color: #3498db;
}

.pie-wrapper.progress-30 .pie .left-side {
  -webkit-transform: rotate(108deg);
  transform: rotate(108deg);
}

.pie-wrapper.progress-60 .pie {
  clip: rect(auto, auto, auto, auto);
}

.pie-wrapper.progress-60 .pie .right-side {
  -webkit-transform: rotate(180deg);
  transform: rotate(180deg);
}

.pie-wrapper.progress-60 .pie .half-circle {
  border-color: #9b59b6;
}

.pie-wrapper.progress-60 .pie .left-side {
  -webkit-transform: rotate(216deg);
  transform: rotate(216deg);
}

.pie-wrapper.progress-90 .pie {
  clip: rect(auto, auto, auto, auto);
}

.pie-wrapper.progress-90 .pie .right-side {
  -webkit-transform: rotate(180deg);
  transform: rotate(180deg);
}

.pie-wrapper.progress-90 .pie .half-circle {
  border-color: #e67e22;
}

.pie-wrapper.progress-90 .pie .left-side {
  -webkit-transform: rotate(324deg);
  transform: rotate(324deg);
}

.pie-wrapper.progress-45 .pie .right-side {
  display: none;
}

.pie-wrapper.progress-45 .pie .half-circle {
  border-color: #1abc9c;
}

.pie-wrapper.progress-45 .pie .left-side {
  -webkit-transform: rotate(162deg);
  transform: rotate(162deg);
}

.pie-wrapper.progress-75 .pie {
  clip: rect(auto, auto, auto, auto);
}

.pie-wrapper.progress-75 .pie .right-side {
  -webkit-transform: rotate(180deg);
  transform: rotate(180deg);
}

.pie-wrapper.progress-75 .pie .half-circle {
  border-color: #8e44ad;
}

.pie-wrapper.progress-75 .pie .left-side {
  -webkit-transform: rotate(270deg);
  transform: rotate(270deg);
}

.pie-wrapper.progress-95 .pie {
  clip: rect(auto, auto, auto, auto);
}

.pie-wrapper.progress-95 .pie .right-side {
  -webkit-transform: rotate(180deg);
  transform: rotate(180deg);
}

.pie-wrapper.progress-95 .pie .half-circle {
  border-color: #e74c3c;
}

.pie-wrapper.progress-95 .pie .left-side {
  -webkit-transform: rotate(342deg);
  transform: rotate(342deg);
}

.pie-wrapper--solid {
  border-radius: 50%;
  overflow: hidden;
}

.pie-wrapper--solid:before {
  border-radius: 0 100% 100% 0%;
  content: '';
  display: block;
  height: 100%;
  margin-left: 50%;
  -webkit-transform-origin: left;
  transform-origin: left;
}

.pie-wrapper--solid .label {
  background: transparent;
}

.pie-wrapper--solid.progress-65 {
  background: -webkit-gradient(linear, left top, right top, color-stop(50%, #e67e22), color-stop(50%, #34495e));
  background: linear-gradient(to right, #e67e22 50%, #34495e 50%);
}

.pie-wrapper--solid.progress-65:before {
  background: #e67e22;
  -webkit-transform: rotate(126deg);
  transform: rotate(126deg);
}

.pie-wrapper--solid.progress-25 {
  background: -webkit-gradient(linear, left top, right top, color-stop(50%, #9b59b6), color-stop(50%, #34495e));
  background: linear-gradient(to right, #9b59b6 50%, #34495e 50%);
}

.pie-wrapper--solid.progress-25:before {
  background: #34495e;
  -webkit-transform: rotate(-270deg);
  transform: rotate(-270deg);
}

.pie-wrapper--solid.progress-88 {
  background: -webkit-gradient(linear, left top, right top, color-stop(50%, #3498db), color-stop(50%, #34495e));
  background: linear-gradient(to right, #3498db 50%, #34495e 50%);
}

.pie-wrapper--solid.progress-88:before {
  background: #3498db;
  -webkit-transform: rotate(43.2deg);
  transform: rotate(43.2deg);
}
<div class="set-size charts-container">
  <div class="pie-wrapper progress-30">
    <span class="label">30<span class="smaller">%</span></span>
    <div class="pie">
      <div class="left-side half-circle"></div>
      <div class="right-side half-circle"></div>
    </div>
  </div>

  <div class="pie-wrapper progress-60">
    <span class="label">60<span class="smaller">%</span></span>
    <div class="pie">
      <div class="left-side half-circle"></div>
      <div class="right-side half-circle"></div>
    </div>
  </div>

  <div class="pie-wrapper progress-90">
    <span class="label">90<span class="smaller">%</span></span>
    <div class="pie">
      <div class="left-side half-circle"></div>
      <div class="right-side half-circle"></div>
    </div>
  </div>

  <div class="pie-wrapper progress-45 style-2">
    <span class="label">45<span class="smaller">%</span></span>
    <div class="pie">
      <div class="left-side half-circle"></div>
      <div class="right-side half-circle"></div>
    </div>
    <div class="shadow"></div>
  </div>

  <div class="pie-wrapper progress-75 style-2">
    <span class="label">75<span class="smaller">%</span></span>
    <div class="pie">
      <div class="left-side half-circle"></div>
      <div class="right-side half-circle"></div>
    </div>
    <div class="shadow"></div>
  </div>

 
</div>
like image 26
Momin Avatar answered Oct 27 '25 12:10

Momin