javascript - Youtube api getDuration 方法返回相同的时间
问题描述
我使用 Youtube api 编写了这个脚本。它在指定的持续时间在视频上滑动一个覆盖框。
除了 player.getDuration():Number 方法外,一切都很顺利。它会一直返回相同的时间,并且不会随着视频的进行而继续前进。
下面是相关的代码。完整的代码在这里https://github.com/BennyThadikaran/videoOverlay
init 方法将 youtube Player obj 存储在 player 变量中,并使用 setInterval 每秒运行 activateOverlay。
activateOverlay 获取视频的当前运行时间并检查是否是激活覆盖的时间。
var vidPlugin = (function() {
var data,
player,
activateOverlay = function() {
// get the current time
var t = player.getDuration(),
keys = Object.keys(data);
for (key in data) {
if (data.hasOwnProperty(key)) {
if (t >= data[key].start && t <= data[key].end) {
showOverlay(key);
}
}
}
if (t >= data[key].end) {
hideOverlay();
}
},
init = function(youtubeObj, dataObj) {
data = dataObj;
player = youtubeObj;
var wrapper = document.getElementById("wrapper");
generateOverlay();
wrapper.addEventListener("click", runModal);
},
handler = function(e) {
if (e.data === 1) {
// if playing run activateOverlay function every second
int = setInterval(function() {
activateOverlay();
}, 1000);
wrapper.className = "wrapper wrapper-hide";
}
if (e.data === 2) {
// paused
clearInterval(int);
wrapper.className = "wrapper wrapper-show scale-up-hor-right";
}
};
return {
init: init,
handler: handler
}
}());
window.onload = function() {
vidPlugin.init(player, {
0:{
Name: "Item 1",
Image: "https://via.placeholder.com/45",
Description: "ipsom Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
start: 1,
end: 5
},
1:{
Name: "Item 2",
Image: "https://via.placeholder.com/45",
Description: "ipsom Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
start: 7,
end: 11
}
}
});
}
解决方案
我使用了错误的方法
player.getCurrentTime():Number 以秒为单位提供经过的时间。
推荐阅读
- c - 使用指针访问结构变量时,Cache 会带来什么?
- netlogo - 有没有办法在 NetLogo 中创建不可逾越的障碍?
- angular - 无法在 html 文件中使用 MatTable 和 DataSource:Angularjs7 Angular material 7
- c# - 从另一个 xaml 文件中定义的控件绑定到 ParentViewModel
- dart - 删除列表中的尾随空格
- python - Pip install upgrade 无法删除临时文件
- google-cloud-platform - 项目中所有用户的 Cloud Shell 自定义映像
- firebase - 创建 Firebase 登录名和注册表单时出现意外错误
- html - 如何在 HTML 中获取当前用户?
- json - Freemarker 模板解析器或 snakeyaml 未按预期打印 json 字符串