Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 115 additions & 11 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,116 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Практика позиционирования</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<!--Верстать тут-->
<script src="index.js"></script>
</body>
</html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<div class="container">
<div class="logo-wrapper">
<div class="logo-microsoft">
<div class="square red"></div>
<div class="square green"></div>
<div class="square blue"></div>
<div class="square yellow"></div>
</div>
</div>
<div class="logo-wrapper">
<div class="logo-target">
<div class="target-white-ring">
<div class="target-center"></div>
</div>
</div>
</div>
</div>

<button id="openModalBtn" class="open-modal-btn">
Открыть модальное окно
</button>

<div class="modal-overlay hidden" id="modalOverlay">
<div class="modal">
<button class="modal-close">&times;</button>
<div class="modal-content">
<h1>Модальное окно</h1>

<div class="progress-container">
<div class="progress-bar">
<div class="progress-fill" id="progressFill"></div>
<div class="progress-text">Loading...</div>
<div class="progress-text-white">Loading...</div>
</div>
</div>

<div class="accordeon">
<div class="accordeon-item">
<input
type="checkbox"
id="accordeon1"
class="accordeon-toggle"
/>
<label for="accordeon1" class="accordeon-title"
>Язык программирования GO</label
>
<div class="accordeon-content">
<p>
Go (часто также golang) — компилируемый
многопоточный язык программирования,
разработанный внутри компании Google.
</p>
</div>
</div>

<div class="accordeon-item">
<input
type="checkbox"
id="accordeon2"
class="accordeon-toggle"
/>
<label for="accordeon2" class="accordeon-title"
>ООП</label
>
<div class="accordeon-content">
<p>
Объектно-ориентированное программирование —
методология или стиль программирования на
основе описания типов/моделей предметной
области и их взаимодействия, представленных
порождением из прототипов или как экземпляры
классов, которые образуют иерархию
наследования.
</p>
</div>
</div>

<div class="accordeon-item">
<input
type="checkbox"
id="accordeon3"
class="accordeon-toggle"
/>
<label for="accordeon3" class="accordeon-title"
>Канал</label
>
<div class="accordeon-content">
<p>
Канал — модель межпроцессного взаимодействия
и синхронизации через передачу сообщений в
программировании. Сообщения могут быть
посланы через канал, и другой процесс или
поток, имеющий ссылку на канал, может
получать поток сообщений, отправленных по
каналу как поток. Различные реализации
каналов могут быть синхронными или
асинхронными, использовать буферизацию
сообщений или нет.
</p>
</div>
</div>
</div>
</div>
</div>
</div>

<script src="index.js"></script>
</body>
</html>
63 changes: 57 additions & 6 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,58 @@
/*
Изменить элементу цвет и ширину можно вот так:
const element = document.querySelector('.progress-fill');
const progressBar = document.querySelector('.progress-bar');
const whiteText = document.querySelector('.progress-text-white');

const element = document.querySelector('.myElement');
element.style.color = 'red';
element.style.width = '300px';
*/
function startProgressBar() {
element.style.transition = 'none';
element.style.width = '0%';
whiteText.style.clipPath = 'inset(0 100% 0 0)';

setTimeout(() => {
element.style.transition = 'width 3s';
element.style.width = '100%';
updateWhiteText();
}, 10);
}

function updateWhiteText() {
const progressWidth = element.offsetWidth / progressBar.offsetWidth * 100;
whiteText.style.clipPath = `inset(0 ${100 - progressWidth}% 0 0)`;

if (progressWidth < 100) {
requestAnimationFrame(updateWhiteText);
}
}

const closeButton = document.querySelector('.modal-close');
closeButton.addEventListener('click', () => {
const modal = document.querySelector('.modal');
const overlay = document.querySelector('.modal-overlay');

modal.classList.add('hidden');
overlay.classList.add('hidden');
});

const openModalBtn = document.getElementById('openModalBtn');
openModalBtn.addEventListener('click', () => {
const modal = document.querySelector('.modal');
const overlay = document.querySelector('.modal-overlay');

modal.classList.remove('hidden');
overlay.classList.remove('hidden');

startProgressBar();
});


const logos = document.querySelectorAll('.logo-wrapper');
logos.forEach(logo => {
logo.addEventListener('click', () => {
const modal = document.querySelector('.modal');
const overlay = document.querySelector('.modal-overlay');

modal.classList.remove('hidden');
overlay.classList.remove('hidden');

startProgressBar();
});
});
Loading