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

前提是你 提交于 2020-05-21 07:40:08

问题


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.


Thank you in advance.


回答1:


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> 



回答2:


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>



回答3:


Using canvas. Change the percent for changing the angle.

var canvas = document.getElementById("cvs");
canvas.width = innerWidth;
canvas.height = innerHeight;
var ctx = canvas.getContext("2d");

var percent = 90;

ctx.beginPath();
ctx.arc(innerWidth/2, innerHeight/2, 100, 0, Math.PI * 2);
ctx.strokeStyle = "#111";
ctx.lineWidth = 20;
ctx.stroke();
ctx.closePath();

var angle = percent/100 * 360;
ctx.beginPath();
ctx.arc(innerWidth/2, innerHeight/2, 100, -90 * Math.PI/180, (angle - 90) * Math.PI/180);
ctx.strokeStyle = "#fff";
ctx.lineWidth = 20;
ctx.stroke();
ctx.closePath();

ctx.textBaseline = "middle";
ctx.textAlign = "center";
ctx.font = "40px arial bold";
ctx.fillStyle = "#fff"
ctx.fillText(percent + "%", innerWidth/2, innerHeight/2);
body {
  overflow: hidden;
  background: #000;
}
<body>
  <canvas id="cvs"></canvas>
</body>


来源:https://stackoverflow.com/questions/49345858/html-how-do-i-generate-a-progress-bar-circle-with-a-percentage-in-and-set-the

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!