【问题标题】:Vanilla JS - Displaying Video Length (if statement)Vanilla JS - 显示视频长度(if 语句)
【发布时间】:2015-09-22 09:49:54
【问题描述】:

我希望以以下两种格式显示视频长度:

如果少于 59 秒:

{no_of_sec}

如果超过 59 秒:

{no_of_sec} : {no_of_sec}

目前这段代码:

document.getElementById("video2").duration

返回以下值:

18.133313

我只需要按照上面的格式将它四舍五入到最接近的秒数。不用多想,我想我需要把它四舍五入。这可以使用 Math.round() 来完成,但是当数字超过 59 秒时,我会遇到困难。

我打算将它放入一个函数中,该函数将通过一个名为的类循环视频元素:

.has--videoDuration

有什么想法吗?

【问题讨论】:

  • 您是否正在寻找仅适用于原生 JavaScript 的解决方案?那 moment.js 呢?

标签: javascript math html5-video duration


【解决方案1】:

给定总秒数,您可以计算分钟/秒分量,如下面的 sn-p 所示:

var totalSeconds = 18.133313;

var minutes = Math.floor(totalSeconds / 60);
var seconds = Math.floor(totalSeconds % 60);

alert(minutes + ':' + seconds);

【讨论】:

  • 嗨@w0lf 这是否意味着如果totalSeconds 是18.5111 它将返回18?
  • @Neil 是的,在这种情况下,minutes 将是 0,seconds 将是 18。
  • 我想减少时间比四舍五入要好。您对在 for each 循环或 jQuery .each 中使用它的代码有什么建议吗?
  • @Neil 此代码独立于 jQuery,并调用 .each。只需将其包装在一个函数中,然后随心所欲地调用它。
  • 原件包含一个 document.getElementById("video2") 所以它只能在这个 id 上工作。我将不得不打破重用 ids 的主要罪行.. :(
【解决方案2】:

以您的代码为基础:

var duration = Math.round(document.getElementById("video2").duration);
var minutes = ~~(duration / 60); // 1 minute every 60 seconds
var seconds = duration - 60 * minutes; // Remaining seconds
var timeString = minutes ? (minutes + ':' + seconds) : seconds;

我猜timeString 就是你要找的。​​p>

顺便说一句:我宁愿使用Math.floor 作为持续时间(或~~),但持续时间标准化的确切选择与其余部分无关。

【讨论】:

  • 嗨@florian我不熟悉~~这定义/调用了什么?
  • 它基本上是Math.floor 的缩写形式——~ 运算符是按位非运算符,它只在内部对整数进行运算。因此,该值将被转换为一个数字(在我们的例子中它已经是一个数字)并转换为一个整数(我们想要的)。但是,该值现在被否定。现在我们做另一个按位-不恢复原始(整数)值。在某种程度上,~~ 因此等同于基于类型的 PL 中的(int) 强制转换。对于正整数,它的工作方式与 Math.floor 完全相同,但对于负整数,它就像 Math.ceil 一样。因此它会截断值。
  • 感谢您的跟进!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
相关资源
最近更新 更多