javascript - 如何在 youtube javascript api 中设置默认声音值以便在后台播放视频?

标签 javascript youtube-api youtube-javascript-api

这是来自 |* http://www.seanmccambridge.com/tubular 的 JavaScript 教程,用于在后台播放视频。

我有一些默认选项,可以禁用或启用视频 Controller ,但我无法将默认值设置为用户打开我的网站时的应值。

;(function ($, window) {

    // test for feature support and return if failure

    // defaults
    var defaults = {
        ratio: 3/3, // usually either 4/3 or 16/9 -- tweak as needed
        videoId: '', // toy robot in space is a good default, no?
        mute: false,
        repeat: true,
        width: $(window).width(),
        wrapperZIndex: 99,
        playButtonClass: 'tubular-play',
        pauseButtonClass: 'tubular-pause',
        muteButtonClass: 'tubular-mute',
        volumeUpClass: 'tubular-volume-up',
        volumeDownClass: 'tubular-volume-down',
        increaseVolumeBy: 10,
        start: 0,
        Volume:10
    };

    // methods

    var tubular = function(node, options) { // should be called on the wrapper div
        var options = $.extend({}, defaults, options),
            $body = $('body') // cache body node
            $node = $(node); // cache wrapper node

        // build container
        var tubularContainer = '<div id="tubular-container" style="  position: fixed; z-index: 1; width: 90%; height: 90%"><div id="tubular-player" style="position: absolute"></div></div><div id="tubular-shield" style="width:90%; height: 90%; z-index: 2; position: absolute; left: 0; top: 0;"></div>';

        // set up CSS prereq's, inject tubular container and set up wrapper defaults
        $('html,body').css({'width': '90%', 'height': '90%'});
        $body.prepend(tubularContainer);
        $node.css({position: 'relative', 'z-index': options.wrapperZIndex});

        // set up iframe player, use global scope so YT api can talk
        window.player;
        window.onYouTubeIframeAPIReady = function() {
            player = new YT.Player('tubular-player', {
                width: options.width,
                height: Math.ceil(options.width / options.ratio),
                videoId: options.videoId,
                playerVars: {
                    controls: 0,
                    showinfo: 0,
                    modestbranding: 1,
                    wmode: 'transparent'
                },
                events: {
                    'onReady': onPlayerReady,
                    'onStateChange': onPlayerStateChange
                }
            });
        }

        window.onPlayerReady = function(e) {
            resize();
            if (options.mute) e.target.mute();
            e.target.seekTo(options.start);
            e.target.playVideo();
        }

        window.onPlayerStateChange = function(state) {
            if (state.data === 0 && options.repeat) { // video ended and repeat option is set true
                player.seekTo(options.start); // restart
            }
        }

        // resize handler updates width, height and offset of player after resize/init
        var resize = function() {
            var width = $(window).width(),
                pWidth, // player width, to be defined
                height = $(window).height(),
                pHeight, // player height, tbd
                $tubularPlayer = $('#tubular-player');

            // when screen aspect ratio differs from video, video must center and underlay one dimension

            if (width / options.ratio < height) { // if new video height < window height (gap underneath)
                pWidth = Math.ceil(height * options.ratio); // get new player width
                $tubularPlayer.width(pWidth).height(height).css({left: (width - pWidth) / 2, top: 0}); // player width is greater, offset left; reset top
            } else { // new video width < window width (gap to right)
                pHeight = Math.ceil(width / options.ratio); // get new player height
                $tubularPlayer.width(width).height(pHeight).css({left: 0, top: (height - pHeight) / 2}); // player height is greater, offset top; reset left
            }

        }

        // events
        $(window).on('resize.tubular', function() {
            resize();
        })

        $('body').on('click','.' + options.playButtonClass, function(e) { // play button
            e.preventDefault();
            player.playVideo();
        }).on('click', '.' + options.pauseButtonClass, function(e) { // pause button
            e.preventDefault();
            player.pauseVideo();
        }).on('click', '.' + options.muteButtonClass, function(e) { // mute button
            e.preventDefault();
            (player.isMuted()) ? player.unMute() : player.mute();
        }).on('click', '.' + options.volumeDownClass, function(e) { // volume down button
            e.preventDefault();
            var currentVolume = player.getVolume();
            if (currentVolume < options.increaseVolumeBy) currentVolume = options.increaseVolumeBy;
            player.setVolume(currentVolume - options.increaseVolumeBy);
        }).on('click', '.' + options.volumeUpClass, function(e) { // volume up button
            e.preventDefault();
            if (player.isMuted()) player.unMute(); // if mute is on, unmute
            var currentVolume = player.getVolume();
            if (currentVolume > 10 - options.increaseVolumeBy) currentVolume = 100 - options.increaseVolumeBy;
            player.setVolume(currentVolume + options.increaseVolumeBy);
        })
    }

    // load yt iframe js api

    var tag = document.createElement('script');
    tag.src = "//www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    // create plugin

    $.fn.tubular = function (options) {
        return this.each(function () {
            if (!$.data(this, 'tubular_instantiated')) { // let's only run one
                $.data(this, 'tubular_instantiated', 
                tubular(this, options));
            }
        });
    }

})(jQuery, window);

最佳答案

我正在使用 youtube api,我还没有找到在新的 YT.Player 中设置音量的方法,但您可以在播放器准备好后设置音量。

window.onPlayerReady = function(e) {
    e.target.setVolume(50); // 0 - 100
    e.target.playVideo();
}

关于javascript - 如何在 youtube javascript api 中设置默认声音值以便在后台播放视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26951011/

相关文章:

javascript - 在 mouseLeave 上关闭 jQuery 菜单

javascript - 在复选框上启用或禁用 qtip

python - youtube api上传文件: invalid syntax on except HttpError, e

javascript - Youtube API onYoutubePlayerReady 和 addEventListener 未被触发

javascript - 在移动设备上更改显示设置后 Youtube API 将无法工作

javascript - 自定义 markitUp 工具栏

javascript - 如何将变量从 zscript 传递到 javascript

jquery - youtube api v3 - 从公共(public)播放列表获取视频。不使用 api key

youtube - 如何获取用户的YouTube精选视频的ID

javascript - Youtube API - 如何删除事件监听器?