RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 933505
Accepted
Plutooo
Plutooo
Asked:2020-01-18 08:56:06 +0000 UTC2020-01-18 08:56:06 +0000 UTC 2020-01-18 08:56:06 +0000 UTC

如何为计时器指定一个ID?[关闭]

  • 772
关闭。这个问题需要澄清或补充细节。目前不接受回复。

想改进这个问题?通过编辑此帖子添加更多详细信息并澄清问题。

3年前关闭。

改进问题

有index.js,我马上就说不是我写的(在JS中不特别)。请帮助提供视觉建议,如何在此代码中指定/设置计时器的 ID,以便您可以在一页上使用两个计时器?然后当你添加第二个时,第一个停止计时。

还有一个问题,如何正确地为第一个圆圈制作背景颜色,使其不占据圆圈边框的一半,并增加r_thickness。

var ringer = {
  //countdown_to: "10/31/2014",
  countdown_to: "10/31/2016",
  rings: {
    'DAYS': { 
      s: 86400000, // mseconds in a day,
      max: 365
    },
    'HOURS': {
      s: 3600000, // mseconds per hour,
      max: 24
    },
    'MINUTES': {
      s: 60000, // mseconds per minute
      max: 60
    },
    'SECONDS': {
      s: 1000,
      max: 60
    },
    'MICROSEC': {
      s: 10,
      max: 100
    }
   },
  r_count: 5,
  r_spacing: 10, // px
  r_size: 100, // px
  r_thickness: 2, // px
  update_interval: 11, // ms


  init: function(){

    $r = ringer;
    $r.cvs = document.createElement('canvas'); 

    $r.size = { 
      w: ($r.r_size + $r.r_thickness) * $r.r_count + ($r.r_spacing*($r.r_count-1)), 
      h: ($r.r_size + $r.r_thickness) 
    };



    $r.cvs.setAttribute('width',$r.size.w);           
    $r.cvs.setAttribute('height',$r.size.h);
    $r.ctx = $r.cvs.getContext('2d');
    $(document.body).append($r.cvs);
    $r.cvs = $($r.cvs);    
    $r.ctx.textAlign = 'center';
    $r.actual_size = $r.r_size + $r.r_thickness;
    $r.countdown_to_time = new Date($r.countdown_to).getTime();
    $r.cvs.css({ width: $r.size.w+"px", height: $r.size.h+"px" });
    $r.go();
  },
  ctx: null,
  go: function(){
    var idx=0;

    $r.time = (new Date().getTime()) - $r.countdown_to_time;


    for(var r_key in $r.rings) $r.unit(idx++,r_key,$r.rings[r_key]);      

    setTimeout($r.go,$r.update_interval);
  },
  unit: function(idx,label,ring) {
    var x,y, value, ring_secs = ring.s;
    value = parseFloat($r.time/ring_secs);
    $r.time-=Math.round(parseInt(value)) * ring_secs;
    value = Math.abs(value);

    x = ($r.r_size*.5 + $r.r_thickness*.5);
    x +=+(idx*($r.r_size+$r.r_spacing+$r.r_thickness));
    y = $r.r_size*.5;
    y += $r.r_thickness*.5;


    // calculate arc end angle
    var degrees = 360-(value / ring.max) * 360.0;
    var endAngle = degrees * (Math.PI / 180);

    $r.ctx.save();

    $r.ctx.translate(x,y);
    $r.ctx.clearRect($r.actual_size*-0.5,$r.actual_size*-0.5,$r.actual_size,$r.actual_size);

    // first circle
    $r.ctx.strokeStyle = "rgba(128,128,128,0.2)";
    $r.ctx.beginPath();
    $r.ctx.arc(0,0,$r.r_size/2,0,2 * Math.PI, 2);
    $r.ctx.lineWidth =$r.r_thickness;
    $r.ctx.stroke();
    $r.ctx.fillStyle = "rgba(128,128,128,0.6)";
    $r.ctx.fill();

    // second circle
    $r.ctx.strokeStyle = "rgba(253, 128, 1, 0.9)";
    $r.ctx.beginPath();
    $r.ctx.arc(0,0,$r.r_size/2,0,endAngle, 1);
    $r.ctx.lineWidth =$r.r_thickness;
    $r.ctx.stroke();

    // label
    $r.ctx.fillStyle = "#ffffff";

    $r.ctx.font = '12px Helvetica';
    $r.ctx.fillText(label, 0, 23);
    $r.ctx.fillText(label, 0, 23);   

    $r.ctx.font = 'bold 40px Helvetica';
    $r.ctx.fillText(Math.floor(value), 0, 10);

    $r.ctx.restore();
  }
}

ringer.init();
таймер
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Stepan Kasyanenko
    2020-01-18T12:32:04Z2020-01-18T12:32:04Z

    如果您需要创建多个计时器,您可以创建一个工厂函数,该函数将返回一个计时器对象。

    function ringerFactory(date) {
      let $r;
      const ringer = {
        //countdown_to: "10/31/2014",
        countdown_to: date,
        rings: {
          'DAYS': {
            s: 86400000, // mseconds in a day,
            max: 365
          },
          'HOURS': {
            s: 3600000, // mseconds per hour,
            max: 24
          },
          'MINUTES': {
            s: 60000, // mseconds per minute
            max: 60
          },
          'SECONDS': {
            s: 1000,
            max: 60
          },
          'MICROSEC': {
            s: 10,
            max: 100
          }
        },
        r_count: 5,
        r_spacing: 10, // px
        r_size: 100, // px
        r_thickness: 2, // px
        update_interval: 11, // ms
    
    
        init: function() {
    
          $r = ringer;
    
          $r.cvs = document.createElement('canvas');
    
          $r.size = {
            w: ($r.r_size + $r.r_thickness) * $r.r_count + ($r.r_spacing * ($r.r_count - 1)),
            h: ($r.r_size + $r.r_thickness)
          };
    
    
          $r.cvs.setAttribute('width', $r.size.w);
          $r.cvs.setAttribute('height', $r.size.h);
          $r.ctx = $r.cvs.getContext('2d');
          $(document.body).append($r.cvs);
          $r.cvs = $($r.cvs);
          $r.ctx.textAlign = 'center';
          $r.actual_size = $r.r_size + $r.r_thickness;
          $r.countdown_to_time = new Date($r.countdown_to).getTime();
          $r.cvs.css({
            width: $r.size.w + "px",
            height: $r.size.h + "px"
          });
          $r.go();
        },
        ctx: null,
        go: function() {
          var idx = 0;
    
          $r.time = (new Date().getTime()) - $r.countdown_to_time;
    
    
          for (var r_key in $r.rings) $r.unit(idx++, r_key, $r.rings[r_key]);
    
          setTimeout($r.go, $r.update_interval);
        },
        unit: function(idx, label, ring) {
          var x, y, value, ring_secs = ring.s;
          value = parseFloat($r.time / ring_secs);
          $r.time -= Math.round(parseInt(value)) * ring_secs;
          value = Math.abs(value);
    
          x = ($r.r_size * .5 + $r.r_thickness * .5);
          x += +(idx * ($r.r_size + $r.r_spacing + $r.r_thickness));
          y = $r.r_size * .5;
          y += $r.r_thickness * .5;
    
    
          // calculate arc end angle
          var degrees = 360 - (value / ring.max) * 360.0;
          var endAngle = degrees * (Math.PI / 180);
    
          $r.ctx.save();
    
          $r.ctx.translate(x, y);
          $r.ctx.clearRect($r.actual_size * -0.5, $r.actual_size * -0.5, $r.actual_size, $r.actual_size);
    
          // first circle
          $r.ctx.strokeStyle = "rgba(128,128,128,0.2)";
          $r.ctx.beginPath();
          $r.ctx.arc(0, 0, $r.r_size / 2, 0, 2 * Math.PI, 2);
          $r.ctx.lineWidth = $r.r_thickness;
          $r.ctx.stroke();
          $r.ctx.fillStyle = "rgba(128,128,128,0.6)";
          $r.ctx.fill();
    
          // second circle
          $r.ctx.strokeStyle = "rgba(253, 128, 1, 0.9)";
          $r.ctx.beginPath();
          $r.ctx.arc(0, 0, $r.r_size / 2, 0, endAngle, 1);
          $r.ctx.lineWidth = $r.r_thickness;
          $r.ctx.stroke();
    
          // label
          $r.ctx.fillStyle = "#ffffff";
    
          $r.ctx.font = '12px Helvetica';
          $r.ctx.fillText(label, 0, 23);
          $r.ctx.fillText(label, 0, 23);
    
          $r.ctx.font = 'bold 40px Helvetica';
          $r.ctx.fillText(Math.floor(value), 0, 10);
    
          $r.ctx.restore();
        }
      }
      return ringer;
    }
    
    var ringer = ringerFactory('10/31/2019');
    ringer.init();
    
    var ringer2 = ringerFactory('3/31/2020');
    ringer2.init();
    
    var ringer3 = ringerFactory('10/31/2018');
    ringer3.init();
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5