Skip to content

Instantly share code, notes, and snippets.

@shizhua
Created June 8, 2016 08:40
Show Gist options
  • Save shizhua/996f9bb3cdef7c650ec4ee114311bcd4 to your computer and use it in GitHub Desktop.
Save shizhua/996f9bb3cdef7c650ec4ee114311bcd4 to your computer and use it in GitHub Desktop.
SVG circular progress
$('#percent').on('change', function() {
var val = parseInt($(this).val());
var $circle = $('#svg #bar');
if (isNaN(val)) {
val = 100;
} else {
var r = $circle.attr('r');
var c = Math.PI * (r * 2);
if (val < 0) {
val = 0;
}
if (val > 100) {
val = 100;
}
var pct = ((100 - val) / 100) * c;
$circle.css({
strokeDashoffset: -pct
});
$('#cont').attr('data-pct', val);
}
});
<h1>SVG Circle Progress</h1>
<h2>Based off of CSS3 circle progress bars</h2>
<div id="cont" data-pct="100">
<svg id="svg" width="200" height="200" viewPort="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg">
<circle r="90" cx="100" cy="100" fill="transparent" stroke-dasharray="565.48" stroke-dashoffset="0"></circle>
<circle id="bar" r="90" cx="100" cy="100" fill="transparent" stroke-dasharray="565.48" stroke-dashoffset="0"></circle>
</svg>
</div>
<label for="percent">Type a percent!</label>
<input id="percent" name="percent">
#svg circle {
stroke-dashoffset: 0;
transition: stroke-dashoffset 1s linear;
stroke: #666;
stroke-width: 1em;
}
#svg #bar {
stroke: #FF9F1E;
}
#cont {
display: block;
height: 200px;
width: 200px;
margin: 2em auto;
box-shadow: 0 0 1em black;
border-radius: 100%;
position: relative;
}
#cont:after {
position: absolute;
display: block;
height: 160px;
width: 160px;
left: 50%;
top: 50%;
box-shadow: inset 0 0 1em black;
content: attr(data-pct)"%";
margin-top: -80px;
margin-left: -80px;
border-radius: 100%;
line-height: 160px;
font-size: 2em;
text-shadow: 0 0 0.5em black;
}
input {
color: #000;
}
/* Make things perty */
html {
height: 100%;
}
body {
font-family: 'Source Sans Pro', Helvetica, Arial, sans-serif;
background: url(http://www.jmchristensendesign.com/wp-content/themes/jmcdsn/images/intro_default-background.jpg);
color: #fff;
height: 100%;
padding-top: 2em;
text-align: center;
}
h1,
h2 {
margin: 0;
text-transform: uppercase;
text-shadow: 0 0 0.5em black;
}
h2 {
font-weight: 300
}
input {
border: 1px solid #666;
background: #333;
color: #fff;
padding: 0.5em;
box-shadow: none;
outline: none !important;
margin: 1em auto;
text-align: center;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment