簡體   English   中英

Javascript 為所有元素應用一個函數

[英]Javascript apply a function for all the elements

我已經編寫了一個計算和設置svg圓strokeDasharray和strokeDashoffset的代碼。 它完全正常,但現在我必須將它應用於多個 svg。 這是一個元素的工作代碼:

<div class="progress-ring-container">
  <div class="span-container">
    <span>Users</span>
    <span>4.3</span>
  </div>

<svg data-percentage="4.3" class="progress-ring">
  <circle class="circle" r="25" cx="29" cy="29"/>
  <circle class="circle bg" r="25" cx="29" cy="29"/>
</svg>
</div>
// Circle progress bar
var circle = document.querySelector('circle');
var radius = circle.r.baseVal.value;
var circumference = radius * 2 * Math.PI;

circle.style.strokeDasharray = `${circumference} ${circumference}`;
circle.style.strokeDashoffset = `${circumference}`;

function setProgress(percent) {
   const offset = circumference - percent / 5 * circumference;
   circle.style.strokeDashoffset = offset;
}

var input = document.getElementsByClassName("progress-ring")[0].getAttribute("data-percentage");
setProgress(input);

這是我嘗試解決問題的方法:

// Circle progress bar
var circles = document.querySelectorAll('circle');
var circlesArr = Array.from(circles);
circlesArr.forEach(circleArray);
 

function circleArray(circle) {
    var radius = circle.r.baseVal.value;
    var circumference = radius * 2 * Math.PI;

    circle.style.strokeDasharray = `${circumference} ${circumference}`;
    circle.style.strokeDashoffset = `${circumference}`;
    return circumference;
}

var circumferenceFunction = circleArray();

function setProgress(percent) {
   const offset = circumferenceFunction - percent / 5 * circumferenceFunction;
   circle.style.strokeDashoffset = offset;
}

var input = document.getElementsByClassName("progress-ring")[0].getAttribute("data-percentage");
setProgress(input);

我想在 jQuery 中使用類似 .each() 的東西,但我仍然沒有找到正確的解決方案。 你有什么主意嗎?

您可以嘗試以下操作:

var circles = document.querySelectorAll('circle');
var circlesArr = Array.from(circles);



function circleArray(circle) {
  var radius = circle.r.baseVal.value;
  var circumference = radius * 2 * Math.PI;

  circle.style.strokeDasharray = `${circumference} ${circumference}`;
  circle.style.strokeDashoffset = `${circumference}`;
  const input = circle.closest('.progress-ring').getAttribute("data-percentage")
  setProgress(input, circle);

  function setProgress(percent, circle) {
    const offset = circumference - percent / 5 * circumference;
    circle.style.strokeDashoffset = offset;
  }
}

circlesArr.forEach(circleArray);

您的代碼適用於所有類為circle svg 為什么你要遍歷它們。 試試這個。 這是html:

<div class="progress-ring-container">
  <div class="span-container">
    <span>Users</span>
    <span>4.3</span>
  </div>

<svg data-percentage="4.3" class="progress-ring">
  <circle class="circle" r="25" cx="29" cy="29"/>
  <circle class="circle bg" r="25" cx="29" cy="29"/>
</svg>
<svg data-percentage="4.3" class="progress-ring">
  <circle class="circle" r="25" cx="100" cy="29"/>
  <circle class="circle bg" r="25" cx="100" cy="29"/>
</svg>
<svg data-percentage="4.3" class="progress-ring">
  <circle class="circle" r="25" cx="180" cy="29"/>
  <circle class="circle bg" r="25" cx="180" cy="29"/>
</svg>
<svg data-percentage="4.3" class="progress-ring">
  <circle class="circle" r="25" cx="260" cy="29"/>
  <circle class="circle bg" r="25" cx="260" cy="29"/>
</svg>
<svg data-percentage="4.3" class="progress-ring">
  <circle class="circle" r="25" cx="340" cy="29"/>
  <circle class="circle bg" r="25" cx="340" cy="29"/>
</svg>
</div>

和js

var circle = document.querySelector('circle');
var radius = circle.r.baseVal.value;
var circumference = radius * 2 * Math.PI;

circle.style.strokeDasharray = `${circumference} ${circumference}`;
circle.style.strokeDashoffset = `${circumference}`;

function setProgress(percent) {
   const offset = circumference - percent / 5 * circumference;
   circle.style.strokeDashoffset = offset;
}

var input = document.getElementsByClassName("progress-ring")[0].getAttribute("data-percentage");
setProgress(input);

您的代碼正在運行。 我不明白。 為什么你需要一一做。 css 適用於所有類

 var circle = document.querySelector('circle'); var radius = circle.r.baseVal.value; var circumference = radius * 2 * Math.PI; circle.style.strokeDasharray = `${circumference} ${circumference}`; circle.style.strokeDashoffset = `${circumference}`; function setProgress(percent) { const offset = circumference - percent / 5 * circumference; circle.style.strokeDashoffset = offset; } var input = document.getElementsByClassName("progress-ring")[0].getAttribute("data-percentage"); setProgress(input);
 <svg data-percentage="4.3" class="progress-ring"> <circle class="circle" r="25" cx="29" cy="29"/> <circle class="circle bg" r="25" cx="29" cy="29"/> </svg> <svg data-percentage="4.3" class="progress-ring"> <circle class="circle" r="25" cx="100" cy="29"/> <circle class="circle bg" r="25" cx="100" cy="29"/> </svg> <svg data-percentage="4.3" class="progress-ring"> <circle class="circle" r="25" cx="180" cy="29"/> <circle class="circle bg" r="25" cx="180" cy="29"/> </svg> <svg data-percentage="4.3" class="progress-ring"> <circle class="circle" r="25" cx="260" cy="29"/> <circle class="circle bg" r="25" cx="260" cy="29"/> </svg> <svg data-percentage="4.3" class="progress-ring"> <circle class="circle" r="25" cx="340" cy="29"/> <circle class="circle bg" r="25" cx="340" cy="29"/> </svg> </div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM