17.06.2018, 18:27
|
Новичок на форуме
|
|
Регистрация: 17.06.2018
Сообщений: 3
|
|
Звук в чате.
Добрый день. Недавно начал увлекаться js. И тут возникла одна проблемка: есть чат, рабочий, но я не знаю, как сделать так, что бы при появлении нового сообщения в чате издавался звук.
Надеюсь на помощь.Заранее спасибо.
(При желании , нужен еще checkbox, что бы включать/выключать данную возможность.)
|
|
17.06.2018, 19:56
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
<button>Клик</button> <input type="checkbox" checked>
<script>
var chek = document.querySelector('input');
var audio = new Audio(['https://nvdx.ru/vega.mp3']);
document.querySelector('button').onclick =()=> chek.checked && audio.play();
</script>
Последний раз редактировалось j0hnik, 17.06.2018 в 20:03.
|
|
17.06.2018, 20:21
|
Новичок на форуме
|
|
Регистрация: 17.06.2018
Сообщений: 3
|
|
Сообщение от j0hnik
|
<button>Клик</button> <input type="checkbox" checked>
<script>
var chek = document.querySelector('input');
var audio = new Audio(['https://nvdx.ru/vega.mp3']);
document.querySelector('button').onclick =()=> chek.checked && audio.play();
</script>
|
Большое спасибо. Но это немного не то , что мне нужно. Мне надо , когда в чате появляется новый div , то издается звук.
//допустим , id чата #chatroom
|
|
17.06.2018, 20:30
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,072
|
|
Riroy,
найдите функцию добаления сообщений и туда поставьте audio.play();
|
|
18.06.2018, 11:52
|
Новичок на форуме
|
|
Регистрация: 17.06.2018
Сообщений: 3
|
|
Сообщение от рони
|
Riroy,
найдите функцию добаления сообщений и туда поставьте audio.play();
|
Я пишу поверхностный код. Исходников у меня нет, они зашифрованы
|
|
18.06.2018, 16:58
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,662
|
|
j0hnik,
new Audio([URLString]) квадратные скобки это необязательный параметр, не массив.
Riroy,
MutationObserver, но надо знать вашу иерархию элементов.
<div id="chat">Messages:</div>
<script>
var target = document.getElementById('chat');
var observer = new MutationObserver(function (mutationsList) {
//console.log(mutationsList);
for (var mutation of mutationsList) {
if (mutation.addedNodes.length) {
audio.play();
break;
}
}
});
var audio = new Audio('https://nvdx.ru/vega.mp3');
audio.addEventListener('canplay', function () {
observer.observe(target, { childList: true });
});
function fakeServer(t, i, ms) {
var id = setInterval(function () {
if (i) t.textContent += i--;
else clearInterval(id);
}, ms);
}
fakeServer(target, 5, 5000);
</script>
Последний раз редактировалось Rise, 18.06.2018 в 17:58.
|
|
18.06.2018, 17:01
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Rise,
Проaбгрейдим
Сообщение от Riroy
|
они зашифрованы
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.time{
margin-right: 10px;
color: #999;
}
.mess{
color: #555;
margin-left: 10px;
}
.name{
display: inline-block;
width: 105px;
}
</style>
</head>
<body>
<div id="chatroom"></div>
<script>
var room = document.querySelector('#chatroom');
var observer = new MutationObserver(function(mutations) {
mutations.forEach(mutation=>{
var audio = new Audio('http://boobooka.com/wp-content/uploads/2016/09/ICQ_-_Zvuk_as_ki.mp3');
audio.play();
});
});
observer.observe(room, {childList: true});
//Эмулятор чата
var rnd = (min, max) => Math.floor(Math.random() * (max - min)) + min;
var chat = ['Приветики','Как делишки?','Вы все г***', 'Я тебя люблю!', 'Ты че братан попутал?', 'Как погодка?', 'ля-ля-ля ля-ля-ля'],
nameUs = ['KiskaLove','100%Малышка','MafiaBoY', 'Spiker'],
color = ['red','green','blue','cyan'];
(mess=()=>{
var rn = rnd(0, nameUs.length);
room.insertAdjacentHTML('beforeend', `<div><span class="time">${new Date().toLocaleString('ru', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
})}</span> <span class="name" style="color:${color[rn]}">${nameUs[rn]}:</span> <span class="mess">${chat[rnd(0, chat.length)]}</span></div>`);
setTimeout(mess,rnd(500,3000));
})();
</script>
</body>
</html>
Последний раз редактировалось j0hnik, 18.06.2018 в 17:06.
|
|
18.06.2018, 17:12
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
есть ли способ не создавать новое аудио каждый раз?
но чтобы при частом нажатии поведение было такое же?
<button>Клик</button> <input type="checkbox" checked>
<script>
var chek = document.querySelector('input');
document.querySelector('button').onclick =()=> {
var audio = new Audio('https://nvdx.ru/vega.mp3');
chek.checked && audio.play();
};
</script>
|
|
18.06.2018, 18:06
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,662
|
|
Добавил еще проверку, ведь нам удаление не нужно же.
j0hnik,
Объявить глобально и всё. Крутой чат
Последний раз редактировалось Rise, 18.06.2018 в 18:13.
|
|
18.06.2018, 18:50
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сообщение от Rise
|
Объявить глобально и всё
|
Так пока предыдущий не воспроизведется новый не хочет играть =(
<button>Клик</button> <input type="checkbox" checked>
<script>
var chek = document.querySelector('input');
document.querySelector('button').onclick =()=> {
var audio = new Audio('https://nvdx.ru/vega.mp3');
chek.checked && audio.play();
};
</script>
<button>Клик</button> <input type="checkbox" checked>
<script>
var chek = document.querySelector('input');
var audio = new Audio('https://nvdx.ru/vega.mp3');
document.querySelector('button').onclick =()=> {
chek.checked && audio.play();
};
</script>
|
|
|
|