【问题标题】:HotKey to Play/Pause HTML5 Music Player [closed]播放/暂停 HTML5 音乐播放器的热键 [关闭]
【发布时间】:2012-01-24 18:09:44
【问题描述】:

这是我用于 HTML5 音乐播放器的 JavaScript 代码的一小部分。我想知道你们是否可以帮助我构建一个热键来使用空格键切换播放/暂停按钮。有什么想法吗?

代码:

   $('.trackslist li').live('click', function(event) {

    var $track = $(this),
        $player = $track.closest('.player'),
        trackId = $track.data('sc-track').id,
        play = $player.is(':not(.playing)') || $track.is(':not(.active)');

    if (play) { onPlay($player, trackId); }else{ onPause($player); }

    $track.addClass('active').siblings('li').removeClass('active');

    return false;

  });

    $('.next').live('click', function(event) {
        $player = $(this).closest('.player');
        onNext($player);
    });

    $('.prev').live('click', function(event) {
        $player = $(this).closest('.player');
        onPrev($player);
    });

我发现的一个想法:

document.onkeydown = function(e){

    var ev = isIE?event:e;
    if(ev.charCode && ev.charCode == 32)
        player.playPause();
    else{
        switch(ev.keyCode){
            case 32:
                player.playPause();
                break;
            case 39:
                player.nextSong();
                break;
            case 37:
                player.prevSong();
                break;
            case 38:
                player.volumeInc();
                break;
            case 40:
                player.volumeDec();
                break;
        }
    }
}

【问题讨论】:

    标签: jquery html hotkeys


    【解决方案1】:

    document 元素上的keydown 事件代码中,player 变量未设置为任何值。

    jQuery 还使用 e.which 规范化 e.keyCodee.charCode 属性,但前提是您使用 jQuery 绑定到事件:

    $(document).on('keydown', function (event) {
        var key    = event.which,//get charCode of event
            player = $('audio');//get the player (I'm assuming it's an `audio` tag)
    
        switch(ev.keyCode){
            case 32:
                player.playPause();
                break;
            case 39:
                player.nextSong();
                break;
            case 37:
                player.prevSong();
                break;
            case 38:
                player.volumeInc();
                break;
            case 40:
                player.volumeDec();
                break;
        }
    
    });
    

    我注意到 trackId = $track.data('sc-track').id 可能实际上并没有获得 $track 元素的 ID,请尝试以下方法之一:

    trackId = $track.data('sc-track')//this will get the `data-sc-track` attribute for this element
    

    trackId = $track[0].id//this will get the ID of this element
    

    最后一点,.live() 自 jQuery 1.7 起已被贬值。如果您使用的是旧版本,则应使用 .delegate(),如果您使用 jQuery 1.7 或更高版本,则应使用 .on()

    来源:http://api.jquery.com/on

    【讨论】:

    • 所以我没有办法做到这一点?
    • @RickyCortes 您需要在keydown 事件处理程序中检索对播放器的引用,以便您可以暂停或播放它。
    • 哦,好吧,底部代码只是我找到的相关内容。和上面的代码无关。
    • @RickyCortes 那么你尝试了什么,问题是什么?你有我可以看到的实时版本吗?
    • 知道了.. 这很有帮助。谢谢兄弟!
    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多