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"));