Как отключить звук на странице с помощью JS?

Как отключить звук на моей странице с помощью JS?

Это должно отключить теги HTML5 <audio> и <video> вместе с Flash и друзьями.

Ответ 1

Правило №1: Никогда не включайте автозапуск аудио при загрузке страницы.

В любом случае я покажу для HTML5 с помощью jQuery:

// WARNING: Untested code ;)

window.my_mute = false;

$('#my_mute_button').bind('click', function(){

    $('audio,video').each(function(){

        if (!my_mute ) {

            if( !$(this).paused ) {
                $(this).data('muted',true); //Store elements muted by the button.
                $(this).pause(); // or .muted=true to keep playing muted
            }

        } else {

            if( $(this).data('muted') ) {
                $(this).data('muted',false);
                $(this).play(); // or .muted=false
            }

        }
    });

    my_mute = !my_mute;

});

Игроки Flash Media зависят от пользовательского API (надеюсь), подверженного JavaScript.

Но вы получаете идею, итерацию через медиа, проверку/сохранение состояния воспроизведения и отключение/включение звука.

Ответ 2

Это легко сделать в ваниле JS:

// Mute a singular HTML5 element
function muteMe(elem) {
    elem.muted = true;
    elem.pause();
}

// Try to mute all video and audio elements on the page
function mutePage() {
    var videos = document.querySelectorAll("video"),
        audios = document.querySelectorAll("audio");

    [].forEach.call(videos, function(video) { muteMe(video); });
    [].forEach.call(audios, function(audio) { muteMe(audio); });
}

Это, конечно, работает только с элементами <video> или <audio>, поскольку такие элементы, как инициализированный звук Flash или JS, вообще невозможно ограничить.

Ответ 3

Удерживайте ссылку на все аудио/видео элементы внутри массива, а затем создайте функцию, которая выполняет цикл над ними при установке .muted=true.

Ответ 4

Я сделал это вот так:

Array.prototype.slice.call(document.querySelectorAll('audio')).forEach(function(audio) {
    audio.muted = true;
});