【问题标题】:How pause the (playing) background music when the next tab button is pressed按下下一个标签按钮时如何暂停(播放)背景音乐
【发布时间】:2014-03-05 00:44:44
【问题描述】:

我有一个 HTML5 音频背景音乐播放器,它有一键播放和暂停。它具有动画效果,因此在播放或暂停时音乐会淡入或淡出。此外,我的页面中有 2 个标签,其中一个有 youtube 视频。所以我想在按下下一张幻灯片的按钮时淡出背景音乐。当再次按下幻灯片的按钮时(返回到没有视频的第一张幻灯片),音乐会淡入并播放。

这里是DEMO on JSFiddle

这是我的 jquery 代码:

$('#go').on('click',function(evt){
    var active = $('.accordion:visible');
    var nextElement = active.next();
    active.hide();
    if(nextElement.hasClass("accordion")){
        nextElement.fadeIn(1000);
    }else{
       $('.accordion:first').fadeIn(1000);
    }


});

//Music player
var beepTwo = $("#musicBeat");
beepTwo[0].play();
$("#dan").click(function() {  
    if (beepTwo[0].paused == false) {
        beepTwo[0].pause();
        beepTwo.animate({volume: 0}, 2000, 'swing', function() {
            // really stop the music 

        });
        $(this).addClass("is-paused");
     } else {
         beepTwo[0].play();  
         beepTwo.animate({volume: 1}, 2000);
         $(this).removeClass("is-paused");
     }

});

【问题讨论】:

    标签: javascript jquery html youtube-api html5-audio


    【解决方案1】:

    你去吧:

    $('#go').on('click',function(evt){
        var active = $('.accordion:visible');
        var nextElement = active.next();
    
        active.hide();
        if(!nextElement.hasClass("accordion")){
           nextElement = $('.accordion:first');
        }
        nextElement.fadeIn(1000);
    
        if(nextElement.attr('id') == 'one') {
            playBackgroundMusic();
        }else {
            pauseBackgroundMusic();
        }
    });
    
    function mute() {
        muted = true;
        pauseBackgroundMusic();
    }
    
    function unmute() {
        muted = false;
        playBackgroundMusic();
    }
    
    function pauseBackgroundMusic() {
        if (beepTwo[0].paused == false) {
            beepTwo.animate({volume: 0}, 2000, 'swing', function() {
                // really stop the music
                beepTwo[0].pause();        
            });
            $('#dan').addClass("is-paused");
        }
    }
    
    function playBackgroundMusic() {
        // only play music if the player is not muted
        if (beepTwo[0].paused == true && muted == false) {
            beepTwo[0].play();  
            beepTwo.animate({volume: 1}, 2000);
            $('#dan').removeClass("is-paused");
        }
    }
    
    function toggleBackgroundMusic() {
        if (muted) {
            unmute();
        } else {
            mute();
        }
    }
    
    $('#dan').click(toggleBackgroundMusic);
    
    //Music player
    var beepTwo = $("#musicBeat");
    var muted = false;
    playBackgroundMusic();
    

    脚本现在做什么来查看下一个打开的手风琴选项卡是否具有 id “one”。在这种情况下,播放音乐。如果打开任何其他选项卡,音乐将暂停。 toggleBackgroundMusic()方法用于玩家切换。

    如果您想添加更多标签并播放/暂停音乐,您可以简单地编辑#go 元素的 onClick 函数中的 if 子句。

    工作演示位于: http://jsfiddle.net/4Trwc/4/

    编辑: 并使用新的静音功能: http://jsfiddle.net/4Trwc/6/

    Edit-2: 淡出固定: http://jsfiddle.net/4Trwc/7/

    【讨论】:

    • 感谢您的帮助。只有一个问题。当音乐已经静音时,然后单击下一步按钮,它仍然处于静音状态,这很好,但然后再次按下它按钮以返回第一张幻灯片,音乐开始。哪个不应该。因为在他们去另一张幻灯片之前它没有播放。我正在考虑添加一个带有变量的 if 条件,如果正在播放音乐并且按下下一个按钮,或者它没有播放并且按下按钮,那么这是真的。你对此有什么想法吗?
    • 嗯,使用变量muted 绝对是一个好方法。我认为具体的解决方案还取决于其他一些事情。用户是否可以取消静音并播放 youtube 视频页面上的背景音乐?
    • 真的没有。那不重要。唯一重要的是音乐是否已经静音,因此在重新打开第一张幻灯片后不得播放。如果它正在播放,那么它必须在幻灯片中暂停并在移动到幻灯片时再次播放。
    • 好的,我认为更新添加了请求的行为。在播放之前,我只是检查播放器是否静音。我们现在使用 mute() 和 unmute() 方法,而不是使用 play 方法来切换静音按钮。
    • jsfiddle.net/4Trwc/7 您只需在淡出后移动pause() 即可触发。在之前的解决方案中,我们首先暂停播放器,然后开始淡出;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多