[英]Apply a JavaScript function to all Array elements except the ith element
[英]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.