如何在点击时显示 0:00 而不是 NaN:NaN

Posted

技术标签:

【中文标题】如何在点击时显示 0:00 而不是 NaN:NaN【英文标题】:How to display 0:00 instead of NaN:NaN on click 【发布时间】:2020-07-15 03:31:51 【问题描述】:

我有一个带有播放列表的音频播放器,但是当我单击新曲目时,它会短暂显示 NaN:NaN,在此我有持续时间,直到我加载曲目。这是我拥有的,但它不起作用。

audioPlayer.addEventListener("timeupdate", function() 
    var curmins = Math.floor(audioPlayer.currentTime / 60);
    var cursecs = Math.floor(audioPlayer.currentTime - curmins * 60);

    var durmins = Math.floor(audioPlayer.duration / 60);
    var dursecs = Math.floor(audioPlayer.duration - durmins * 60);
       if(cursecs < 10) cursecs = "0"+cursecs; 
       if(dursecs < 10) dursecs = "0"+dursecs; 
     
      
      if (durmins !== 'NaN') 
        $('#duration').text(durmins+":"+dursecs);
        $('#current-time').text(curmins+":"+cursecs);
      
 )

【问题讨论】:

【参考方案1】:

使用isNaN

if (isNaN(durmins)) 

您还可以使用NaN 是唯一不等于自身的对象的属性。

if(durmins !== durmins) 

【讨论】:

@caseym 没问题。【参考方案2】:
(durmins !== 'NaN')

条件检查根本不起作用,原因如下:

javascript 中的number 类型实际上是遵循 IEEE754 规范的浮点数。运行时会得到false

NaN == NaN

NaN === NaN

由于在 IEEE754 规范下,NaN(Not a Number) 是一个特殊的内置值,任何与 NaN 相比的数字(包括 NaN 本身)都应该为 false。

检查数字是否为 NaN 的唯一方法是使用函数 isNaN(value)

有关 ieee754 的更多信息,请参阅https://en.wikipedia.org/wiki/IEEE_754

【讨论】:

【参考方案3】:

我会将整个计算包装在 if 块中,并且仅当属性存在时 - 执行计算 - 否则在持续时间和当前时间显示“0:00”

audioPlayer.addEventListener("timeupdate", function() 
  if(audioPlayer.duration) 
    var curmins = Math.floor(audioPlayer.currentTime / 60);
    var cursecs = Math.floor(audioPlayer.currentTime - curmins * 60);

    var durmins = Math.floor(audioPlayer.duration / 60);
    var dursecs = Math.floor(audioPlayer.duration - durmins * 60);
       if(cursecs < 10) cursecs = "0"+cursecs; 
       if(dursecs < 10) dursecs = "0"+dursecs; 
     
    $('#duration').text(durmins+":"+dursecs);
    $('#current-time').text(curmins+":"+cursecs);
   else 
     $('#duration').text("0:00");
    $('#current-time').text("0:00");
  

您还可以在开始时将持续时间和当前时间变量设置为“0:00”,如果属性存在则更新变量。如果 tghe 属性不存在 - 那么变量的原始值将被传递给文本元素。

audioPlayer.addEventListener("timeupdate", function() 
  var duration = "0:00";
  var currentTime = "0:00";

  if(audioPlayer.duration) 
    var curmins = Math.floor(audioPlayer.currentTime / 60);
    var cursecs = Math.floor(audioPlayer.currentTime - curmins * 60);

    var durmins = Math.floor(audioPlayer.duration / 60);
    var dursecs = Math.floor(audioPlayer.duration - durmins * 60);
       if(cursecs < 10) cursecs = "0"+cursecs; 
       if(dursecs < 10) dursecs = "0"+dursecs; 
     
    duration = durmins + ":" + dursecs;
    currentTime = curmins + ":" + cursecs;
  
  $('#duration').text(duration);
  $('#current-time').text(currentTime);

【讨论】:

【参考方案4】:

使用 if (durmins) 代替 if (durmins !== 'NaN')

NaN 表示未定义的变量。它不是一个字符串。 if (durmins) 将检查变量是否已定义并运行代码。

【讨论】:

以上是关于如何在点击时显示 0:00 而不是 NaN:NaN的主要内容,如果未能解决你的问题,请参考以下文章

为啥 TensorFlow 返回 [[nan nan]] 而不是 CSV 文件中的概率?

extjs4 在按钮单击而不是鼠标悬停时显示工具提示

如何使 QtCreator 在调试而不是汇编时显示“正常”代码?

如何在应用程序首先加载而不是Angular 5中的appComponent时显示登录组件

单击时显示悬停而不是悬停在plotly python中的数据点上?

NaN 是不是等于 NaN?