【问题标题】:How to animate circular progress bar on page scroll down如何在页面向下滚动时为圆形进度条设置动画
【发布时间】:2019-10-05 08:29:21
【问题描述】:

我有一个圆形进度条,在页面加载时会显示动画,但我希望它在用户向下滚动到它时显示动画,因为它会在页面中间。现在如果页面加载,用户看不到动画。

所以本质上,动画应该暂停,直到用户向下滚动到某个点,一旦看到栏,动画就会开始。

我用过这个jquery插件https://www.jqueryscript.net/loading/jQuery-Plugin-SVG-Progress-Circle.html

function makesvg(percentage, inner_text = "") {
    var abs_percentage = Math.abs(percentage).toString();
    var percentage_str = percentage.toString();
    var classes = ""
    if (percentage < 0) {
        classes = "danger-stroke circle-chart__circle--negative";
    } else if (percentage > 0 && percentage <= 30) {
        classes = "warning-stroke";
    } else {
        classes = "success-stroke";
    }
    var svg = '<svg class="circle-chart" viewbox="0 0 33.83098862 33.83098862" 
    xmlns = "http://www.w3.org/2000/svg" > ' +
    '<circle class="circle-chart__background" cx="16.9" cy="16.9" r="15.9"  / >
    ' +
    '<circle class="circle-chart__circle ' + classes + '"' +
        'stroke-dasharray="' + abs_percentage + ',100"    cx="16.9" cy="16.9" 
    r = "15.9" / > ' +
    '<g class="circle-chart__info">' +
    '   <text style="color:#fff;" class="circle-chart__percent" x="17.9" 
    y = "15.5" > '+percentage_str+' % < /text>';
    if (inner_text) {
        svg += '<text class="circle-chart__subline" x="16.91549431" 
        y = "22" > '+inner_text+' < /text>'
    }
    svg += ' </g></svg>';
    return svg
}

(function($) {
    $.fn.circlechart = function() {
        this.each(function() {
            var percentage = $(this).data("percentage");
            var inner_text = $(this).text();
            var inner_text2 = $(this).text();
            $(this).html(makesvg(percentage, inner_text));
        });
        return this;
    };
});

$('.circlechart').circlechart(); // Initialization

【问题讨论】:

  • 在动画开始并且用户进一步向下滚动到该上传进度条不可见的地方后,如果动画停止,或者一旦开始显示动画,它应该继续直到达到 100%。
  • 我只希望当用户向下滚动到中间部分时动画才开始@Sandeep Garg
  • 这个很清楚什么时候开始动画,我想知道动画开始后,同时进度条开始填充,同时,如果用户向上或向下滚动,进度条现在不可见,动画需要停止在原来的位置,或者它应该继续进行
  • 那么动画需要停止@Sandeep Garg

标签: javascript jquery


【解决方案1】:

Dan的结帐答案 参考 Dan 的回答,我正在添加可用于启动/停止循环进度条动画的代码

function onVisibilityChange(el, callback) {
    var old_visible;
    return function () {
        var visible = isElementInViewport(el);
        if (visible != old_visible) {
            old_visible = visible;
            if (typeof callback == 'function') {
                callback(visible);
            }
        }
    }
}
var percentage = 0;
var handler = onVisibilityChange(el, function(visiblity_status) {
    /* your code go here */
    if (visibility_status) {
     if (percentage == 0) {
       $('.circlechart').circlechart(); 
     } else {
        // Code to resume progress bar if there is any method defined for the plugin you are using.
     }

    } else {
        // Code to stop progress bar if there is any method to stop it.
    }
});


//jQuery
$(window).on('DOMContentLoaded load resize scroll', handler); 

【讨论】:

  • 你实现了isElementInViewport 函数写在我在回答中给出的丹的参考答案中。
  • 请检查CodePen我已创建。通过此参考,您可以获得一些帮助来实现您想要的。
  • @Sandeep Garg 效果很好,但是当您上下滚动时,它会复制文本。请查看截图nimb.ws/Xf28sv
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多