如何将多个类似的功能合并为一个?

时间:2018-05-26 10:01:34

标签: javascript api youtube

我坚持使用一段在Youtube API上应用事件的JavaScript代码。目标是当您单击相应的按钮时,视频向后移动5秒,10秒或30秒或向前移动5秒,10秒或30秒。

我的问题是我有六个相似的功能,但没有相同的时间值。 (在这个例子中,我只放了两个函数:rewind5()备份5秒,rewind10()备份10秒。)

我正在寻找一个可以帮助我将这两个函数(rewind5()rewind10())组合成一个函数的慈善灵​​魂。一旦我有了正确的结构,我就可以使用单个函数创建其他四个函数。

我的JS档案:

// Rewind 5s

function onPlayerReady(event){
    if(player.getPlayerState()===1 || player.getPlayerState()===2){
        $('#s5back').prop('disabled', false);
        $( '#s5back' ).click(function() {
            rewind5();
            });
    } else {
        $('#s5back').prop('disabled', true);
    }
}

function rewind5() {
    var currentTime = player.getCurrentTime();
    player.seekTo(currentTime - 5, true);
    player.playVideo();

};

// Rewind 10s

function onPlayerReady(event){
    if(player.getPlayerState()===1 || player.getPlayerState()===2){
        $('#s10back').prop('disabled', false);
        $( '#s10back' ).click(function() {
            rewind10();
            });
    } else {
        $('#s10back').prop('disabled', true);
    }
}

function rewind10(){
    var currentTime = player.getCurrentTime();
    player.seekTo(currentTime - 10, true);
    player.playVideo();
};

我的HTML文件:

<div id="video-placeholder"></div>
<script type="text/javascript">
var player,
time_update_interval = 0;

function onYouTubeIframeAPIReady() {
    player = new YT.Player('video-placeholder', {
        width: '100%',
        height: '625px',
        videoId: 'ID URL YOUTUBE',
        playerVars: {
            color: 'white',
            controls: 0,
            rel: 0,
            showinfo: 0
        },
        events: {
            onReady: initialize,
            onStateChange: onPlayerReady
        }
    });
}
</script>

1 个答案:

答案 0 :(得分:3)

为什么不只有一个seekBy函数,并将其传递所需的秒数以进行倒带?

function seekBy(secs){
  var currentTime = player.getCurrentTime();
  player.seekTo(currentTime + secs, true);
  player.playVideo();
}

并使用例如

实现它
$('#s10back').click(function() {
  seekBy(-10);
});

或5秒,或30或60.要继续,请传递正数:

$('#s10forward').click(function() {
  seekBy(10);
});