带有图像和圆形进度条的圆形按钮

Posted

技术标签:

【中文标题】带有图像和圆形进度条的圆形按钮【英文标题】:Circular button with image and circular progress bar 【发布时间】:2019-12-28 19:29:53 【问题描述】:

我正在尝试制作一个按钮,里面有一个图像,外面有一个圆形进度条,按下按钮后是彩色的。

我有一个 .svg 图像,它必须显示在一个直径为 140 像素的圆圈中。此图片必须是触发请求并激活其圆周上的进度条的按钮。

我正在寻找一个不使用复杂库(最多 jquery)的简单示例。

我尝试在 html 中使用 svg,但我不知道如何将其变成按钮并激活进度条或清理它。我也无法正确调整它的大小。

<svg  >
    <image x="0%" y="0%"   xlink:href="images/small-gate.svg"></image>
    <circle cx="50" cy="50" r="40" stroke="#428bca" stroke- fill="url(#image)" />
</svg>

我想创建类似示例的内容,但不是“暂停”(两个破折号),而是我的 .svg 图像。

示例:

【问题讨论】:

我猜你必须更改图像元素上的 ref 【参考方案1】:

这里有一个准系统方法:

window.addEventListener("load", addImgButton);
function addImgButton()
  var element = document.getElementById("mybutton");
      element.addEventListener("click", toggleAnim);  


function toggleAnim()
  var element = document.getElementById("pbar");
      element.classList.toggle("showAnim");
:root
  --perc: 65;
  --sw: 6;
  --atime: 2s;
  --pi2: 6.28318;
  --r: 40;
  --perim: calc(var(--pi2) * var(--r));
  --pend: calc(var(--r) * var(--pi2) * var(--perc) / 100);
  --prest: calc(var(--r) * var(--pi2) * (100 - var(--perc)) / 100);

#progress
  stroke: #aaa; /* #428bca; */
  stroke-width: var(--sw);

#pbar
  stroke-width: var(--sw);
  fill: none;


.showAnim
  stroke: #428bca;
  stroke-dasharray: var(--pend) var(--prest);
  animation: progress var(--atime) ease-out forwards;


@keyframes progress 
  0% 
    stroke-dasharray: 0 1000;
  
<svg  >
  <defs>
    <clipPath id="cFrame">
      <circle cx="50" cy="50" r="40" />
    </clipPath>
  </defs>
    <image id="mybutton" x="0" y="0%"   xlink:href="https://upload.wikimedia.org/wikipedia/commons/d/dc/Melithreptus_lunatus.jpg" clip-path="url(#cFrame)"></image>
    <circle id="progress" cx="50" cy="50" r="40" fill="url(#image)" />
  <circle id="pbar" cx="50" cy="50" r="40" />
</svg>

它使用 CSS 动画和纯 javascript 进行触发。动画进度背后的简单想法是您可以使用stroke-dasharray 属性来显示弧线。唯一的技巧是正确设置开始和结束值。 关于内部图像,应该很简单:设置图片的坐标和比例(我还添加了一个剪辑,只显示在圆圈内)并使用它的idclass 添加一个click事件监听器。几点:

您可以在css 部分的开头自定义进度。变量--perc 包含弧的最终百分比。变量--atime 控制动画时间。变量--r 也很重要。它包含圆的半径,如果你在svg中改变它,你也需要在这里改变它。

javascript 代码为pbar 圆圈切换showAnim 类以响应对图像的点击。

pbar 的起始 stroke-dasharray0 1000。第二个值只是大于弧的长度。当我尝试使用变量设置它时,动画不起作用。如果增加圆的半径,则可能需要增加第二个值。

您可以试一试this codepen 中的示例。

【讨论】:

以上是关于带有图像和圆形进度条的圆形按钮的主要内容,如果未能解决你的问题,请参考以下文章

带有进度条的按钮 android

iOS圆环,环形渐变进度条的封装

如何给progressbar圆形进度条设置颜色

Android 圆形进度条-跟360进度类似-时钟刻度

Qt第三方圆形进度条-及其改进

如何只实现一个圆形进度条,直到图像被滑动加载