How to create a circular countdown timer using HTML, CSS or JavaScript?

后端 未结 2 1681
庸人自扰
庸人自扰 2021-01-30 09:35

Currently, I am working on a quiz game and in that, for each question, I wish to place a countdown timer. I got some plugins, but I wish if I could create it myself. What I am

相关标签:
2条回答
  • 2021-01-30 10:18

    you should look at the jquery plugin Knob https://github.com/aterrien/jQuery-Knob, generated canvas circular input, and set timer behavior like :

    var time = 0,
        maxTime = 60;
    $('#dial').knob({
      readOnly : true,
      thickness : 0.1,
      max : maxTime
    });
    
    
    setInterval(function() {
      if(time>maxTime) time = 0;
      time++;
      $('#dial')
            .val(time)
            .trigger('change');
    }, 1000);
    

    I made a codepen here : http://codepen.io/pik_at/pen/azeYRg

    0 讨论(0)
  • 2021-01-30 10:21

    Here is something i was playing around with a while ago. It uses a combination of SVG, css transitions and javascript. You should be able to rip it apart and use as a starting point...

    /**
    * The setTimeout({},0) is a workaround for what appears to be a bug in StackSnippets.
    * It should not be required. See JSFiddle version.
    */
    
    setTimeout(function() { 
    
      var time = 10; /* how long the timer will run (seconds) */
      var initialOffset = '440';
      var i = 1
    
      /* Need initial run as interval hasn't yet occured... */
      $('.circle_animation').css('stroke-dashoffset', initialOffset-(1*(initialOffset/time)));
    
      var interval = setInterval(function() {
          $('h2').text(i);
          if (i == time) {  	
            clearInterval(interval);
            return;
          }
          $('.circle_animation').css('stroke-dashoffset', initialOffset-((i+1)*(initialOffset/time)));
          i++;  
      }, 1000);
    
    }, 0)
    .item {
        position: relative;
        float: left;
    }
    
    .item h2 {
        text-align:center;
        position: absolute;
        line-height: 125px;
        width: 100%;
    }
    
    svg {
       -webkit-transform: rotate(-90deg);
        transform: rotate(-90deg);
    }
    
    .circle_animation {
      stroke-dasharray: 440; /* this value is the pixel circumference of the circle */
      stroke-dashoffset: 440;
      transition: all 1s linear;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <div class="item html">
        <h2>0</h2>
        <svg width="160" height="160" xmlns="http://www.w3.org/2000/svg">
         <g>
          <title>Layer 1</title>
          <circle id="circle" class="circle_animation" r="69.85699" cy="81" cx="81" stroke-width="8" stroke="#6fdb6f" fill="none"/>
         </g>
        </svg>
    </div>

    JSFiddle version

    0 讨论(0)
提交回复
热议问题