简体   繁体   English

jQuery:HTML5音频控件仅在播放时浮动

[英]jQuery: HTML5 audio control floating only when playing

I am using the following script to with the audio controls class="box follow-scroll" to make it float while the page is scrolling. 我正在将以下脚本与音频控件class =“ box follow-scroll”配合使用,以使其在页面滚动时浮动。 But I was wondering if it possible to make it float only while the audio is in either play or pause mode? 但是我想知道是否有可能仅在音频处于播放暂停模式时才使其浮动? If it stopped it didn't start, it stays where it is. 如果停止,它没有开始,它将停留在原处。

$(window).load(function(){

    (function($) {
        var element = $('.follow-scroll'),
            originalY = element.offset().top;

        var topMargin = 20;
        element.css('position', 'relative');

        $(window).on('scroll', function(event) {
            var scrollTop = $(window).scrollTop();

            element.stop(false, false).animate({
                top: scrollTop < originalY ? 0 : scrollTop - originalY + topMargin
            }, 300);
        });
    })(jQuery);

});

The html: 的HTML:

<audio controls class="box follow-scroll">
<source src="http://techslides.com/demos/samples/sample.ogg" type="audio/ogg">
<source src="http://techslides.com/demos/samples/sample.mp3" type="audio/mpeg">
</audio>

Add two eventlisteners to your audio element. 将两个事件侦听器添加到您的音频元素。 One that starts floating when your audio is playing, and one that resets your audio element when it is paused. 一种在播放音频时开始浮动,另一种在暂停时重置音频元素。 In the following example the stopFloating() resets your audio element by setting var scrollTop = 0; 在下面的示例中, stopFloating()通过设置var scrollTop = 0;重置音频元素var scrollTop = 0; to zero. 归零。 You can of course further tune this function. 您当然可以进一步调整此功能。

Something like: 就像是:

var element = $('.follow-scroll'), originalY = element.offset().top;

var topMargin = 20;
element.css('position', 'relative');

element[0].addEventListener("playing", function() {
    startFloating();
});

element[0].addEventListener("pause", function() {
    stopFloating();
});


function startFloating () {
    $(window).on('scroll', function(event) {

        var scrollTop = $(window).scrollTop();

        element.stop(false, false).animate({
                top: scrollTop < originalY ? 0 : scrollTop - originalY + topMargin
        }, 300);    
    });
}

// Reset your element
function stopFloating () {
    $(window).on('scroll', function(event) {

        var scrollTop = 0;

        element.stop(false, false).animate({
                top: scrollTop < originalY ? 0 : scrollTop - originalY + topMargin
        }, 300);    
    });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM