【问题标题】:How to randomize an array of functions?如何随机化一组函数?
【发布时间】:2021-07-17 07:24:51
【问题描述】:

这里是初学者,所以我的问题只是let videos = [] 数组中的最后一个function 有效。其他函数也可以工作,但仅当它们是数组中的最后一个索引时。所以我尝试将函数分配给变量并将它们放在let videos = [] 数组中,同时播放所有视频。我已将这些设置为在播放 1 个视频时隐藏其他视频。

另外,我正在努力确保每个视频只播放 1 次。

function playNextVideo() { 
    let videos = [showVideo1(), showVideo2(), showVideo3()]; 
    let randomVideo = Math.floor(Math.random() * videos.length); 
    videos.splice(randomVideo,1); 
}

document.getElementById('video1').addEventListener('ended',playNextVideo(),false);

【问题讨论】:

  • randomVideo 是索引,所以你应该使用return videos[randomVideo] 并且showVideo1() 是否返回函数?
  • 是的,它曾经使视频仅在数组中的最后一项时才可见,但现在该部分已解决。 :)

标签: javascript arrays function sorting math


【解决方案1】:

与其调用所有三个函数并担心隐藏您不想要的视频,只需存储对函数的引用并一次只执行一个:

function playNextVideo() { 
    let videos = [ showVideo1, showVideo2, showVideo3 ]; 
    let randomVideo = Math.floor( Math.random() * videos.length ); 

    videos.splice(randomVideo, 1)[0](); // Splice out the element at position randomVideo. You'll get back an array of 1 element, so extract the 0th element (a function) and call it
}

【讨论】:

  • 比我之前建议的更好。
  • 这行得通! 2个小问题。该视频不会自动播放到下一个视频,每个视频只能播放 1 次。我在这里得到了答案:stackoverflow.com/questions/67101727/… 但我不确定如何将其应用于我的新情况。
  • 我已经更新了我的答案,在播放之前从数组中删除了视频,因此视频只播放一次。至于自动播放下一个视频,您必须为视频添加一个事件处理程序,以便当它们完成时,它们会自动调用playNextVideo() 函数。由于您没有提供实际视频实施的详细信息,因此您只能自己完成这部分。
  • 我找到了一个简单的解决方案,我所要做的就是删除事件监听器中函数的括号。现在 100% 有效!
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多