#javascript #html #css #css-transitions
Вопрос:
Я пытаюсь установить переход между разделами в одностраничном приложении, все они находятся на одной странице, но другие разделы не отображаются, поэтому, когда я выполняю событие, для запрошенного раздела не отображается ни один, теперь я не просто хочу, чтобы раздел входил таким образом, а установил тайм-аут, который заставил бы раздел входить не сразу, а примерно через 5 секунд, как я могу этого добиться, я уже пробовал settimeout, но, похоже, он не работает.
- Все разделы, кроме одного, не имеют отображения,
- Событие выполняется на странице, на которой нет отображения, чтобы ввести запрошенный раздел и переключить отображение нет
- По запросу страницы страница переходит в режим или имеет тайм-аут, поэтому страница не загружается сразу, Код ниже, HTML
<div class="main-container"> <div class="page padding main" id="page-main"> <div class="modal hidden"> <button class="btn-close-modal">amp;times;</button> <h2 class="modal-header">Login to your account</h2> <form class="modal-form"> <div> <label for="">Username:</label> <input type="text" /> </div> <div> <label for="">Password:</label> <input type="text" /> </div> <button class="btn header-button">Login amp;rarr;</button> </form> </div> <div class="overlay hidden"></div> <nav class="header-nav"> <a href="#" class="header-img"> <svg viewBox="0 0 256 256" class="header-svg"> <path class="path" d="m 15.625507,46.199537 55.767886,-32.030352 55.623047,32.281229 -0.14485,64.311586 0.14485,-64.311586 55.76788,-32.030352 55.62305,32.281229 -0.14485,64.311579 -55.76788,32.03036 -55.62305,-32.28123 55.62305,32.28123 -0.14485,64.31158 -55.76788,32.03035 L 70.958866,207.10393 71.103708,142.79235 126.87159,110.762 71.103708,142.79235 15.480664,110.51112 Z" style=" fill: none; stroke: #000; stroke-width: 13; stroke-linejoin: round; stroke-linecap: round; " /> </svg> </a> <button class="header-button login" type="button" data-page="page-login" > LOGIN </button> </nav> <div class="header-hero"> <div class="circle1"></div> <div class="circle2"></div> <div class="header-text"> <h1 class="header-text-description"> Make Banking Easy with Express </h1> <p class="header-text-texts"> Together we can make banking awesome! </p> <p class="header-text-texts"> Use our mobile app to your need today </p> <button class="header-button header-buttons" type="button"> <a href="">Services</a> </button> </div> <div class="header-image hide-for-desktop"> <img src="./assets/hand.jpg" alt="" class="header-hand" /> <button class="header-image-1">Transfer</button> <button class="header-image-2">Loan</button> </div> </div> <div class="page u-none" id="page-login"> <nav> <a data-page="page-dashboard">User Settings</a> <a data-page="page-main">Logout</a> </nav> <h1>MAIN PAGE</h1> <form action="" name="login" method="" id="form-id" required> <label for="name">Name</label> <input type="text" id="name" /> <label for="pin">Pin</label> <input type="text" id="pin" /> <button type="submit" class="submit">Submit</button> </form> </div> <div class="page u-none" id="page-signup"> <nav> <a data-page="page-settings">User Settings</a> <a data-page="page-login">Logout</a> </nav> <h1>MAIN PAGE</h1> <form action="" name="login" method="" id="form-id" required> <label for="name">Name</label> <input type="text" id="name" /> <label for="pin">Pin</label> <input type="text" id="pin" /> <button type="submit" class="submit">Submit</button> </form> </div> <div class="page u-none" id="page-dashboard"> <nav> <a data-page="page-main">Back to Main</a> <a data-page="page-login">Logout</a> </nav> <h1>SETTINGS PAGE</h1> </div> </div>
CSS
nav {
display: flex;
}
nav a {
color: #00f;
padding: 5px 10px;
cursor: pointer;
}
/* Utility classes */
.u-none {
display: none;
opacity: 0;
animation: 2s fadeIn forwards;
}
@keyframes fadeIn {
100% {
opacity: 1;
display: block;
}
}
Язык JavaScript
const ELS_pages = document.querySelectorAll('.page');
const ELS_buttons = document.querySelectorAll('[data-page]');
console.log(ELS_pages);
console.log(ELS_buttons);
const submit = document.querySelector('.submit');
const goToPage = (id) => {
ELS_pages.forEach((EL, i) => {
// console.log(EL.id);
console.log(`${i} : ${EL.id}`);
console.log(id);
// EL.classList.toggle("u-none", EL.id !== id);
setTimeout(() => {
if (EL.id === id) {
EL.classList.remove('u-none');
} else {
EL.classList.add('u-none');
}
}, 20);
});
};
// goToPage("page-main");
ELS_buttons.forEach((EL) =>
EL.addEventListener('click', () => {
goToPage(EL.dataset.page);
})
);
Ответ №1:
Ниже приводится очень простая реализация. Его можно изменить многими способами в зависимости от желаемого эффекта. Мне пришлось изменить ваш HTML, потому что ваши страницы были вложены на главную страницу, и когда последняя скрылась, она скрывала и все остальные страницы.
const ELS_pages = document.querySelectorAll('.page');
const ELS_buttons = document.querySelectorAll('[data-page]');
const submit = document.querySelector('.submit');
const goToPage = (id) => {
ELS_pages.forEach((EL, i) => {
if (EL.id === id) {
setTimeout(() => {
EL.classList.remove('u-none');
// THIS TIMEOUT IS IMPORTANT TO ALLOW BROWSER TO REPAINT AFTER CHANGING display PROPERTY. IF NOT, TRANSITION COULD NOT WORK.
setTimeout(() => {
EL.style.opacity = 1;
}, 100);
}, 1000);
} else {
EL.style.opacity = 0;
setTimeout(() => {
EL.classList.add('u-none');
}, 1000);
}
});
};
ELS_buttons.forEach((EL) =>
EL.addEventListener('click', () => {
goToPage(EL.dataset.page);
})
);
goToPage('page-main');
nav {
display: flex;
}
nav a {
color: #00f;
padding: 5px 10px;
cursor: pointer;
}
.page {
opacity: 0;
transition: opacity 1s ease-in-out;
}
.u-none {
display: none;
}
<div class="main-container">
<div class="page padding main u-none" id="page-main">
<div class="modal hidden">
<button class="btn-close-modal">amp;times;</button>
<h2 class="modal-header">Login to your account</h2>
<form class="modal-form">
<div>
<label for="input-username">Username:</label>
<input id="input-username" type="text"/>
</div>
<div>
<label for="input-password">Password:</label>
<input id="input-password" type="text"/>
</div>
<button class="btn header-button">Login amp;rarr;</button>
</form>
</div>
<div class="overlay hidden"></div>
<nav class="header-nav">
<a href="#" class="header-img">
<svg viewBox="0 0 256 256" class="header-svg">
<path
class="path"
d="m 15.625507,46.199537 55.767886,-32.030352 55.623047,32.281229 -0.14485,64.311586 0.14485,-64.311586 55.76788,-32.030352 55.62305,32.281229 -0.14485,64.311579 -55.76788,32.03036 -55.62305,-32.28123 55.62305,32.28123 -0.14485,64.31158 -55.76788,32.03035 L 70.958866,207.10393 71.103708,142.79235 126.87159,110.762 71.103708,142.79235 15.480664,110.51112 Z"
style="
fill: none;
stroke: #000;
stroke-width: 13;
stroke-linejoin: round;
stroke-linecap: round;
"
/>
</svg>
</a>
<button
class="header-button login"
type="button"
data-page="page-login"
>
LOGIN
</button>
</nav>
<div class="header-hero">
<div class="circle1"></div>
<div class="circle2"></div>
<div class="header-text">
<h1 class="header-text-description">
Make Banking Easy with Express
</h1>
<p class="header-text-texts">
Together we can make banking awesome!
</p>
<p class="header-text-texts">
Use our mobile app to your need today
</p>
<button class="header-button header-buttons" type="button">
<a href="">Services</a>
</button>
</div>
<div class="header-image hide-for-desktop">
<img src="./assets/hand.jpg" alt="" class="header-hand"/>
<button class="header-image-1">Transfer</button>
<button class="header-image-2">Loan</button>
</div>
</div>
</div>
<div class="page u-none" id="page-login">
<nav>
<a data-page="page-dashboard">User Settings</a>
<a data-page="page-main">Logout</a>
</nav>
<h1>MAIN PAGE 1</h1>
<form action="" name="login" method="POST" id="form-1">
<label for="name-1">Name</label>
<input type="text" id="name-1" required/>
<label for="pin-1">Pin</label>
<input type="text" id="pin-1" required/>
<button type="submit" class="submit">Submit</button>
</form>
</div>
<div class="page u-none" id="page-signup">
<nav>
<a data-page="page-settings">User Settings</a>
<a data-page="page-login">Logout</a>
</nav>
<h1>MAIN PAGE 2</h1>
<form action="" name="login" method="POST" id="form-id">
<label for="name-2">Name</label>
<input type="text" id="name-2" required/>
<label for="pin-2">Pin</label>
<input type="text" id="pin-2" required/>
<button type="submit" class="submit">Submit</button>
</form>
</div>
<div class="page u-none" id="page-dashboard">
<nav>
<a data-page="page-main">Back to Main</a>
<a data-page="page-login">Logout</a>
</nav>
<h1>SETTINGS PAGE</h1>
</div>
</div>
Ответ №2:
Вы можете использовать fullpage.js
Это просто и имеет множество настроек. так что проверьте это https://github.com/alvarotrigo/fullpage.js