0

I am using a skill progress in my site. It is a circular progress bar. It has a small animation when it loads, the effect is like fill up the border. but the animation runs immediately when the page load. I want to make a way if I scroll to that section only then the animation will run.

I am using the circliful plugin for the progress bar.

enter image description here

user3396867
  • 109
  • 2
  • 11

1 Answers1

1

You need to initialize animation if the element is in viewport. Check isElementInViewport function on window scroll.

Sample js

function isElementInViewport (el) {

    //special bonus for those using jQuery
    if (typeof jQuery === "function" && el instanceof jQuery) {
        el = el[0];
    }

    var rect = el.getBoundingClientRect();

    return (
        rect.top >= 0 &&
        rect.left >= 0 &&
        rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
        rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
    );

}

var isAnimated = false;
window.onscroll = function(){
    if(isElementInViewport($('#myStat')) && !isAnimated){
        $('#myStat').circliful();
        isAnimated = true;
    }
}

How to tell if a DOM element is visible in the current viewport?

Community
  • 1
  • 1
Shishir Morshed
  • 797
  • 8
  • 21