177 lines
7.1 KiB
PHP
177 lines
7.1 KiB
PHP
<!DOCTYPE html>
|
||
<html lang="en">
|
||
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<script src="https://cdn.tailwindcss.com"></script>
|
||
<title>Resposive Layout</title>
|
||
</head>
|
||
|
||
<body>
|
||
|
||
|
||
|
||
<nav class="bg-white border-gray-200 dark:bg-gray-900 ">
|
||
<div class="max-w-screen-xl flex flex-wrap items-center justify-between mx-auto p-5">
|
||
<a href="https://flowbite.com/" class="flex items-center space-x-3 rtl:space-x-reverse">
|
||
<img src="https://flowbite.com/docs/images/logo.svg" class="h-8" alt="Flowbite Logo" />
|
||
<span class="self-center text-2xl font-semibold whitespace-nowrap dark:text-white">Flowbite</span>
|
||
</a>
|
||
<!-- <button data-collapse-toggle="navbar-default" type="button"
|
||
class="inline-flex items-center p-2 w-10 h-10 justify-center text-sm text-gray-500 rounded-lg md:hidden hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-200 dark:text-gray-400 dark:hover:bg-gray-700 dark:focus:ring-gray-600"
|
||
aria-controls="navbar-default" aria-expanded="false">
|
||
<span class="sr-only">Open main menu</span>
|
||
<svg class="w-5 h-5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 17 14">
|
||
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||
d="M1 1h15M1 7h15M1 13h15" />
|
||
</svg> -->
|
||
</button>
|
||
<div class="hidden w-full md:block md:w-auto" id="navbar-default">
|
||
<ul
|
||
class="font-medium flex flex-col p-5 md:p-0 mt-4 border border-gray-100 rounded-lg bg-gray-50 md:flex-row md:space-x-8 rtl:space-x-reverse md:mt-0 md:border-0 md:bg-white dark:bg-gray-800 md:dark:bg-gray-900 dark:border-gray-700">
|
||
<li>
|
||
<a href="./login"
|
||
class="block py-2 px-3 text-white bg-blue-700 rounded md:bg-transparent md:text-blue-700 md:p-0 dark:text-white md:dark:text-blue-500"
|
||
aria-current="page">Login</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
<div class="flex border-b">
|
||
<button id="tab1" class="px-4 py-2 border-b-2 border-blue-500 text-blue-500 font-medium active"
|
||
data-target="content1" onclick="showTab('tab1')">All Styles</button>
|
||
<button id="tab2"
|
||
class="px-4 py-2 border-b-2 border-transparent text-gray-500 font-medium hover:text-gray-700 hover:border-gray-300"
|
||
data-target="content2" onclick="showTab('tab2')">Classic</button>
|
||
<button id="tab3"
|
||
class="px-4 py-2 border-b-2 border-transparent text-gray-500 font-medium hover:text-gray-700 hover:border-gray-300"
|
||
data-target="content3" onclick="showTab('tab3')">Jazz</button>
|
||
<button id="tab4"
|
||
class="px-4 py-2 border-b-2 border-transparent text-gray-500 font-medium hover:text-gray-700 hover:border-gray-300"
|
||
data-target="content4" onclick="showTab('tab4')">Rock</button>
|
||
</div>
|
||
|
||
<div id="content1" class="p-4 mt-4">
|
||
<div id="feed"><?php echo $portial ?></div>
|
||
<button type="button" id="paginator" data-id="1">Далее...</button>
|
||
</div>
|
||
<div id="content2" class="p-4 mt-4 hidden">
|
||
Содержимое вкладки 2
|
||
</div>
|
||
<div id="content3" class="p-4 mt-4 hidden">
|
||
Содержимое вкладки 3
|
||
</div>
|
||
<div id="content4" class="p-4 mt-4 hidden">
|
||
Содержимое вкладки 4
|
||
</div>
|
||
|
||
|
||
<script>
|
||
function showTab(tabId) {
|
||
const tabs = document.querySelectorAll('.flex button');
|
||
const contents = document.querySelectorAll('.p-4');
|
||
|
||
tabs.forEach(tab => {
|
||
tab.classList.remove('active', 'border-blue-500', 'text-blue-500');
|
||
tab.classList.add('border-transparent', 'text-gray-500');
|
||
});
|
||
|
||
contents.forEach(content => {
|
||
content.classList.add('hidden');
|
||
});
|
||
|
||
const selectedTab = document.getElementById(tabId);
|
||
const contentId = selectedTab.getAttribute('data-target');
|
||
const content = document.getElementById(contentId);
|
||
|
||
selectedTab.classList.add('active', 'border-blue-500', 'text-blue-500');
|
||
selectedTab.classList.remove('border-transparent', 'text-gray-500');
|
||
content.classList.remove('hidden');
|
||
|
||
}
|
||
|
||
async function getFetch(url) {
|
||
try {
|
||
const response = await fetch(url, {
|
||
method: 'get'
|
||
});
|
||
if (!response.ok) {
|
||
throw new Error('Network response was not ok');
|
||
}
|
||
return await response.text();
|
||
} catch (error) {
|
||
console.error('Fetch error:', error);
|
||
return null;
|
||
}
|
||
}
|
||
async function getPage(event) {
|
||
event.stopPropagation();
|
||
event.preventDefault();
|
||
let num_page = parseInt(event.target.getAttribute('data-id'));
|
||
let limit = 5;
|
||
let url = 'portial?offset=' + (limit * num_page) + '&limit=' + limit;
|
||
let data = await getFetch(url);
|
||
|
||
if (!data || data.trim() === "") {
|
||
event.target.remove(); // Убираем кнопку, если данных больше нет
|
||
} else {
|
||
let feed = document.getElementById('feed');
|
||
feed.innerHTML += data; // Добавляем новые данные к существующим
|
||
event.target.setAttribute('data-id', num_page + 1); // Увеличиваем номер страницы
|
||
}
|
||
}
|
||
|
||
const parent = document.getElementById('paginator');
|
||
parent.addEventListener('click', getPage);
|
||
|
||
// Получаем все аудиоэлементы
|
||
const audioElements = document.querySelectorAll('audio');
|
||
|
||
// Останавливаем все треки, кроме текущего
|
||
function stopAllAudiosExcept(currentAudio) {
|
||
audioElements.forEach(audio => {
|
||
if (audio !== currentAudio && !audio.paused) {
|
||
audio.pause(); // Останавливаем воспроизведение
|
||
audio.currentTime = 0; // Сбрасываем время трека на начало
|
||
}
|
||
});
|
||
}
|
||
|
||
// Добавляем обработчик события play для каждого аудиоэлемента
|
||
audioElements.forEach(audio => {
|
||
audio.addEventListener('play', () => {
|
||
stopAllAudiosExcept(audio); // Останавливаем все другие треки
|
||
});
|
||
});
|
||
|
||
// Функция для последовательного воспроизведения
|
||
function playNextAudio(index) {
|
||
if (index >= audioElements.length) {
|
||
return; // Если треки закончились, ничего не делаем
|
||
}
|
||
|
||
const currentAudio = audioElements[index];
|
||
const nextAudio = audioElements[index + 1];
|
||
|
||
// Воспроизводим текущий трек
|
||
currentAudio.play();
|
||
|
||
// Когда текущий трек заканчивается, запускаем следующий
|
||
currentAudio.addEventListener('ended', () => {
|
||
if (nextAudio) {
|
||
nextAudio.play();
|
||
playNextAudio(index + 1); // Рекурсивно запускаем следующий трек
|
||
}
|
||
});
|
||
}
|
||
|
||
// Запускаем воспроизведение с первого трека
|
||
playNextAudio(0);
|
||
|
||
</script>
|
||
</body>
|
||
|
||
</html>
|