我正在使用Easy Pie Chart并将其略微修改为包括多个百分比和旋转度,以制作完整的饼图。这实际上并没有涉及到EPC,但我想将其作为背景。
我有以下HTML:
<div class="home-slider-chart-container">
<div data-rotate="0" data-percent="2" class="home-slider-chart"></div>
<div data-rotate="" data-percent="27" class="home-slider-chart"></div>
<div data-rotate="" data-percent="20" class="home-slider-chart"></div>
<div data-rotate="" data-percent="40" class="home-slider-chart"></div>
<div data-rotate="" data-percent="6" class="home-slider-chart"></div>
<div data-rotate="" data-percent="5" class="home-slider-chart"></div>
</div>
我想使用jQuery在每个
.home-slider-chart
中运行并存储当前值和之前的所有data-percent
值,然后我将使用它来计算转数。因此,在我的示例中,最后的
data-rotate
值将是:<div data-rotate="0" data-percent="2" class="home-slider-chart"></div>
<div data-rotate="29" data-percent="27" class="home-slider-chart"></div>
<div data-rotate="49" data-percent="20" class="home-slider-chart"></div>
<div data-rotate="89" data-percent="40" class="home-slider-chart"></div>
<div data-rotate="95" data-percent="6" class="home-slider-chart"></div>
<div data-rotate="100" data-percent="5" class="home-slider-chart"></div>
我以为这会行得通,但是它所要做的只是获取先前的百分比,而不是总计所有先前的百分比。
$('.home-slider-chart-container .home-slider-chart').each(function() {
var thisPercentage = $(this).data('percent');
var prevPercentage = $(this).prevAll().data('percent');
var percentageTotal = (thisPercentage + prevPercentage);
var thisRotation = (percentageTotal / 100 * 360);
$(this).data('rotate', thisRotation);
});
我已经设置了jsFiddle,这样您就可以看到我要做什么,并且可以将其用作测试环境https://jsfiddle.net/105o7b5m/1/
最佳答案
您需要在.each()
循环之外的一个变量,该变量可以跟踪运行总计,并且只需要旋转每个元素才可以运行之前的总计(不包括当前值),例如:
var runningTotal = 0;
$('.home-slider-chart-container .home-slider-chart').each(function() {
var thisRotation = (runningTotal / 100 * 360);
$(this).data('rotate', thisRotation);
// now update the running total for the next segment
runningTotal += $(this).data('percent');
});
有效的jsFiddle演示:http://jsfiddle.net/jfriend00/14rc3zL6/
关于javascript - 在jQuery中总计和存储先前的数据编号(值),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29609925/