Circle Progress Bar JQuery插件循环问题

时间:2015-11-22 02:24:54

标签: javascript jquery

问题: 我正在为项目使用Circle Progress JQuery插件(版本:0.6.0)并对其进行了一些修改,但是,每个圆圈似乎都会重复(或循环)一段时间而不是仅执行动画一次。

由于所做的修改,例如添加链接到单击的位置,动画开始,似乎不是问题所在。当你开始向下滚动时,当你这样做时 - 每个圆圈都会根据设置的百分比开始制作动画,但在停止之前会多次重复自己。当用户向下滚动时,它应该只为每个圆圈启动一次动画,但我似乎无法找出发生这种情况的根源。

以下是我的内容:

$('.about_nav a:nth-of-type(2)').click(function () {
function animateElements() {
    $('.progressbar').each(function () {
        var elementPos = $(this).offset().top;
        var topOfWindow = $(window).scrollTop();
        var percent = $(this).find('.circle').attr('data-percent');
        var percentage = parseInt(percent, 10) / parseInt(100, 10);
        var animate = $(this).data('animate');
        if (elementPos < topOfWindow + $(window).height() - 30 && !animate) {
            $(this).data('animate', false); // Change this 'false -or- true' - Currently set to false so that each time a user clicks on 'Skill-set' link, animation occurs
            $(this).find('.circle').circleProgress({
                startAngle: -Math.PI / 2,
                value: percent / 100,
                thickness: 2, // Change this for thickness
                fill: {
                    color: '#16A085'
                }
            }).on('circle-animation-progress', function (event, progress, stepValue) {
                $(this).find('.percent').text((stepValue*100).toFixed(0) + "%"); // NOTE: Change '.toFixed(0)' to '.toFixed(1)' to get 1 decimal place to the right...
            }).stop();
        }
    });
}

animateElements();
$('.about_body_wrapper').scroll(animateElements);
});

以下是我的意思的粗略演示:DEMO - 点击&#34;技能设置&#34;选项卡并向下滚动。

对此的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

所以我想我已经在This updated(again) JSFIDDLE

上实现了你想要的

基本上,我在动画开始之前将data-animate属性设置为true,这会阻止任何后续动画调用再次为其设置动画(您看到的循环问题)。

然后,我从单击处理事件中取出animateElements函数定义。我做到了这一点,所以我可以在更全球范围内调用它。我现在在更改标签的点击处理程序中调用animateElements。不得不这样做因为它在页面加载时被触发所有元素offsetTop = 0因为它们开始隐藏。

最后,我在animate元素函数中添加了一个init属性,该函数在data-animate时将所有true重置为false。只有从标签点击调用时才会出现这种情况,而不是通过滚动事件调用。

继承了相关的代码更新:

...新的init参数(也必须为传入的滚动事件腾出空间)

function animateElements(e, init) {
    if(init){
        $('.progressbar').data('animate', false);
    }

... animateElements现在最初由标签点击处理程序

调用
    $(currentlist).fadeOut(250, function () {
        $(newlist).fadeIn(200, function(){
            animateElements({}, true);
        });
    });

最后,请注意那里有很多东西,现在你可以在我证明这个概念的时候忘记了jsfiddle。

喝彩!