kalendář test v2
Toggle class name on click in jQuery
by Petr Haluza
HTML
<svg style="position: absolute; width: 0; height: 0; display: none;">
<symbol id="icon-arrow" viewBox="0 0 96 96">
<title>šipka</title>
<path d="M39.66,13.34A8,8,0,0,0,28.34,24.66L51.69,48,28.34,71.34A8,8,0,0,0,39.66,82.66l29-29a8,8,0,0,0,0-11.31Z"/>
</symbol>
</svg>
<div class="wrapper">
<h1>Kalendář</h1>
<div class="sticky-header">
<span>Kalendář</span>
</div>
<div class="table">
<div class="headers">
<div class="buttons">
<button class="btn-left">
<svg><use xlink:href="#icon-arrow"></use></svg>
</button>
<button class="btn-right">
<svg><use xlink:href="#icon-arrow"></use></svg>
</button>
</div>
<div class="scroller syncscroll" name="myElements">
<div class="track time">
<div class="heading">Čas</div>
</div>
<div class="track">
<div class="heading">Pondělí</div>
</div>
<div class="track">
<div class="heading">Úterý</div>
</div>
<div class="track">
<div class="heading">Středa</div>
</div>
<div class="track">
<div class="heading">Čtvrtek</div>
</div>
<div class="track">
<div class="heading">Pátek</div>
</div>
<div class="track">
<div class="heading">Sobota</div>
</div>
<div class="track">
<div class="heading">Neděle</div>
</div>
</div>
</div>
<div class="tracks syncscroll" name="myElements">
<div class="track time">
<div class="entry">
<time>09.00</time>
</div>
<div class="entry">
<time>10.00</time>
</div>
<div class="entry">
<time>11.00</time>
</div>
<div class="entry">
<time>12.00</time>
</div>
<div class="entry">
<time>13.00</time>
</div>
<div class="entry">
<time>14.00</time>
</div>
...
CSS
:root {
--body-bg: #FDFDFD;
--thead-bg: #F7F9FB;
--thead-color: hsl(210, 5%, 40%);
--bd-color: #ebebeb;
--time-color: hsl(210, 5%, 70%);
--time-width: 75px;
--sticky-height: 40px;
}
body {
background: var(--body-bg);
overflow-x: hidden;
}
.wrapper {
padding: 15px;
margin: 10em auto 30em;
max-width: 1080px;
}
h1 {
font-size: 9vmin;
text-align: center;
line-height: 1;
color: #333;
font-family: 'Courgette', cursive;
}
.sticky-header {
height: var(--sticky-height);
display: flex;
align-items: center;
justify-content: center;
background: var(--body-bg);
z-index: 7;
position: sticky;
top: 0;
font-weight: 700;
overflow: hidden;
}
.sticky-header span {
opacity: 0;
transform: translateY(-100%);
transition: .4s;
}
.reveal .sticky-header span {
opacity: 1;
transform: none;
}
.table {
position: relative;
border: solid var(--bd-color);
border-width: 0 1px 0 0;
overscroll-behavior: contain;
}
.headers {
top: var(--sticky-height);
position: -webkit-sticky;
position: sticky;
display: flex;
justify-content: flex-end;
z-index: 1;
box-shadow: 0 10px 50px rgba(0, 0, 0, 0.04);
}
.tracks,
.scroller {
display: flex;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
}
.scroller {
overflow-x: hidden;
flex: 1;
}
.tracks {
overflow: auto;
}
.tracks::-webkit-scrollbar,
.scroller::-webkit-scrollbar {
display: none;
}
.track {
flex: 1 0 22%;
}
.track + .track {
margin-left: -1px;
}
.time {
flex: 0 0 var(--time-width);
position: -webkit-sticky;
position: sticky;
left: 0;
}
.headers .time {
z-index: 5;
}
.tracks .time {
box-shadow: 20px 0 50px rgba(0, 0, 0, 0.05);
}
time {
font-weight: 600;
font-size: 12px;
letter-spacing: .03em;
}
time {
color: hsl(210, 5%, 70%);
text-align: right;
}
.time .heading {
justify-content: flex-end;
padding-right: 1em;
font-weight: 500;
background: #F9F9F9;
}
.heading {
height: 50px;
display: flex;
...
JavaScript
const btnR = document.querySelector('.btn-right');
const btnL = document.querySelector('.btn-left');
const tracks = document.querySelector('.tracks');
const tracksW = tracks.scrollWidth;
btnR.addEventListener('click', _ => {
tracks.scrollBy({
left: tracksW / 2,
behavior: 'smooth'
});
});
btnL.addEventListener('click', _ => {
tracks.scrollBy({
left: -tracksW / 2,
behavior: 'smooth'
});
});
let observer = new IntersectionObserver(entries => {
if (!entries[0].isIntersecting) {
document.body.classList.add("reveal");
} else {
document.body.classList.remove("reveal");
}
});
observer.observe(document.querySelector("#top-of-site-pixel-anchor"));