Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Имитация нажатия на кнопку в audio controls. (https://javascript.ru/forum/misc/85782-imitaciya-nazhatiya-na-knopku-v-audio-controls.html)

III 03.03.2024 11:05

Имитация нажатия на кнопку в audio controls.
 
Всем привет. Есть audio controls для воспроизведения музыки.
<audio controls class="muz">
  <source src="music/1.mp3" type="audio/ogg" />

Есть ли возможность с помощью JS имитировать нажатие на кнопку для начала воспроизведения музыки сразу после загрузки страницы? Знаю раньше была такая возможность, сейчас в браузере это отменили. Обойти этот запрет можно?
Всем спасибо за участие.

ksa 03.03.2024 13:33

Цитата:

Сообщение от III
сейчас в браузере это отменили. Обойти этот запрет можно?

Нет.
Вам дай волю - вы достанете этими звуками и видосами...

Aetae 03.03.2024 16:13

Юзер если захочет может разрешить автозапуск для твоего сайта(слева у адресной строки кнопочка). А если не захочет - то и не надо.

III 03.03.2024 17:52

Да мне это надо не для сайта в интернете, а для автономной страницы. Пусть будет не audio controls, а простая обычная кнопка.

Aetae 03.03.2024 20:31

III, на локальной странице в FF ты точно также можешь разрешить автовоспроизведение. В хроме увы нет.

Простая обычная кнопка кликается button.click(). Но аудио это тебе не воспроизведёт.:)

III 04.03.2024 14:48

Спасибо, всё стало понятно. Значит программное нажатие на кнопку тут не сработает.

III 04.03.2024 17:55

Снова здравствуйте. Хотелось бы уточнить ещё такой вопрос по этой теме.
Речь опять же об автономной форме. Если сделать дополнительно страницу HTML в папке где основная страница, поместить туда кнопку, которая будет перенаправлять на основную страницу, примерно так
<button id="button">
  <i class="fas fa-volume-up"></i>
</button>
<button onclick="window.open('ДР.html','_self');">
. В этой новой странице, от этой же кнопки включается музыка. Всё остальное выполняется на основной странице. Такой вариант возможен? Если да, то подскажите скрипт как это сделать.
Всем спасибо.

Nexus 04.03.2024 21:17

По сути, единственное, что требуется от пользователя - кликнуть по странице, чтобы разрешить проигрывать аудио.
Если очень хочется запустить медиа на странице, то почему не сделать как-то так?

<style>
.overlay {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    margin: auto;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(255, 255, 255, .7);
    z-index: 1;
    
}
</style>

<div class="overlay">
    <button type="button" disabled>
        Loading...
    </button>
</div>

<button type="button" data-role="play-pause-button">
    Pause
</button>

<script>
    document.addEventListener('DOMContentLoaded', () => {
        const audio = new Audio();
        
        const play = () => {
            audio.play().catch(e => {
                alert(e.message);
            });
        };
        
        audio.addEventListener('canplaythrough', () => {
            const button = document.querySelector('.overlay button');
            if (!button) {
                return;
            }
            
            button.textContent = 'Start';
            button.disabled = false;
            
            button.addEventListener('click', () => {
                document.querySelector('.overlay')?.remove();
                
                audio.muted = false;
                audio.loop = true;
                audio.volume = 1;// 0..1
                
                play();
            }, {once: true});
        });
        
        audio.addEventListener('error', () => {
            alert(audio.error?.message ?? 'Something went wrong');
        });
        
        audio.src = 'https://mp3bob.ru/download/muz/Rick_Astley_-_Never_Gonna_Give_You_Up_[www.mp3pulse.ru].mp3';
        
        document.querySelector('[data-role="play-pause-button"]')?.addEventListener('click', e => {
            const button = e.target;
        
            if (audio.paused) {
                button.textContent = 'Pause';
                play();
            } else {
                button.textContent = 'Play';
                audio.pause();
            }
        });
    });
</script>

III 04.03.2024 23:01

Это практически тоже самое, что и нажать кнопку на audio controls. Мне надо, чтобы пользователь нажал один раз где-нибудь кнопку в результате всё заработало, страница открылась, музыка играет и все действия на странице выполняются согласно сценария. У меня страница сделана пипа открытки, хочется сделать так, чтобы пользователь не делал лишних манипуляций. Важно чтобы воспроизведение музыку начиналась сразу после открытия страницы.

Nexus 05.03.2024 00:01

Что-то я не догоняю, в чем разница между кнопкой на целевой странице и кнопкой на первой странице, которая будет открывать вторую?
Что там кнопка, что там. Единственное отличие в том, что первый вариант позволит проигрывать аудио, а второй - нет.

В любом случае, ваша задача не решаема способом, на котором вы настаиваете.


Часовой пояс GMT +3, время: 14:09.