javascript - 更改半径值时 SVG 进度不起作用。如何使用不同大小的进度?

标签 javascript jquery html css svg

<分区>

我想在我的产品中使用 SVG Progress 作为加载。我在代码笔中的 SVG Progress 下面找到了这个。当它的半径值为 90 时它工作正常。如果我改变半径值,它不会工作。 JavaScript 中的一些错误计算。

谢谢。

$('#percent').on('change', function(){
  var val = parseInt($(this).val());
  var $circle = $('#svg #bar');
  
  if (isNaN(val)) {
   val = r; 
  }
  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);
  }
});
#svg circle {
  stroke-dashoffset: 0;
  transition: stroke-dashoffset 1s linear;
  stroke: #666;
  stroke-width: 5px;
}
#svg #bar {
  stroke: #FF9F1E;
}
#cont {
  display: block;
  height: 200px;
  width: 200px;
  margin: 2em auto;
  border-radius: 100%;
  position: relative;
}
#cont:after {
  position: absolute;
  display: block;
  height: 160px;
  width: 160px;
  left: 50%;
  top: 50%;
  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;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<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">

最佳答案

如果你想修改 r="" 你还需要调整 stroke-dasharray=""

例如,请看我的代码片段:-“设置 stroke-dasharray 是你的工作”

<circle r="30" cx="100" cy="100" fill="transparent" stroke-dasharray="200" stroke-dashoffset="0"></circle>      
<circle id="bar" r="30" cx="100" cy="100" fill="transparent" stroke-dasharray="188.50" stroke-dashoffset="0"></circle>

$('#percent').on('change', function(){
  var val = parseInt($(this).val());
  var $circle = $('#svg #bar');
  
  if (isNaN(val)) {
   val = r; 
  }
  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);
  }
});
#svg circle {
  stroke-dashoffset: 0;
  transition: stroke-dashoffset 1s linear;
  stroke: #666;
  stroke-width: 5px;
}
#svg #bar {
  stroke: #FF9F1E;
}
#cont {
  display: block;
  height: 200px;
  width: 200px;
  margin: 2em auto;
  border-radius: 100%;
  position: relative;
}
#cont:after {
  position: absolute;
  display: block;
  height: 160px;
  width: 160px;
  left: 50%;
  top: 50%;
  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;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<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="30" cx="100" cy="100" fill="transparent" stroke-dasharray="200" stroke-dashoffset="0"></circle>
  <circle id="bar" r="30" cx="100" cy="100" fill="transparent" stroke-dasharray="188.50" stroke-dashoffset="0"></circle>
</svg>
</div>
<label for="percent">Type a percent!</label>
<input id="percent" name="percent">

关于javascript - 更改半径值时 SVG 进度不起作用。如何使用不同大小的进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26924989/

上一篇:css - 如何在将光标保持在上方的同时设置 anchor 标记颜色

下一篇:javascript - 在 JavaScript/jQuery 中,是否可以在滚动时跟踪页面上多个 HTML 元素的可见性?

相关文章:

javascript - 使用 Google 日历在 Fullcalendar 中选择事件

javascript - 检查 URL 中的页面名称

javascript - bootstrap-table:如何将一个表嵌套到另一个表中?

javascript - jQuery动画到容器的高度

javascript - 如何在 HTML 表单上制作 Tab 循环

jquery - 在加载新图像时替换 div 上的背景图像而不让它没有背景

javascript - 获取 html 5 视频以全屏模式自动打开

javascript - JS 数组值绑定(bind)到现有数组

javascript - 如何在 typescript 中使用C插件

javascript - 为什么我的 javascript 联系表单不起作用?