Animated Slider | Html Css And JavaScript With Free Source Code

Follow Us On Telegram   Telegram link

This is The Small Project For Your Site And You Can Use It Freely In Your's As Well , As It Is Copyright Free You Can...

In This Project Technologies Are Used Is As Follows :-)

  • HTML
  • CSS
  • JAVASCRIPT

Download Code
HTML
<!DOCTYPE html>
<html lang="en" >
<head>
  <meta charset="UTF-8">
  <title>CodeAtNow - Animated Slider</title>
  <meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
<link rel="stylesheet" href="./style.css">

</head>
<body>
<!-- partial:index.partial.html -->
<!-- Based on https://dribbble.com/shots/4895590-Nav-Interaction-Idea.  -->
<div id="app"></div>
<!-- partial -->
  <script src='https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/gsap-latest-beta.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/react/16.12.0/umd/react.production.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.11.0/umd/react-dom.production.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/gsap/3.0.2/Draggable.min.js'></script>
<script src='https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/InertiaPlugin.min.js'></script><script  src="./script.js"></script>

</body>
</html>
CSS
@import url("https://fonts.googleapis.com/css?family=Roboto:300,400,700,900&display=swap");
:root {
  --text-color: #fff;
  --bg-color: #fff;
  --text-color-alt: #000;
  --grey: #808080;
  --text-color-4: #211f1f;
  --preview-text: #fff;
}
html {
  font-size: 16px;
}
html,
body {
  height: 100%;
}
body {
  overflow-x: hidden;
  margin: 0;
  font-family: "Roboto", sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  background: var(--bg-color);
  color: #fff;
}
#app {
  height: 100%;
}
h3 {
  font-size: 1.5rem;
}
/* hide scrollbar */
body {
  scrollbar-width: none; /* Firefox */
  -ms-overflow-style: none; /* Internet Explorer 10+ */
}
body::-webkit-scrollbar {
  /* WebKit */
  width: 0;
  height: 0;
}
@media screen and (max-width: 768px) {
  html {
    font-size: 14px;
  }
  h3 {
    font-size: 1.25rem;
  }
}
@media screen and (max-width: 414px) {
  html {
    font-size: 12px;
  }
}
a {
  text-decoration: none;
  color: var(--text-color);
  display: inline-block;
  margin: 15px;
}
a:hover {
  color: inherit;
}
ul {
  list-style-type: none;
  padding-left: 0;
  margin: 0;
}
li {
  display: inline-block;
  margin: 0 15px;
}
li a {
  margin: 0px 15px;
}
.navbar {
  display: flex;
  justify-content: space-between;
  padding: 35px 50px;
  position: absolute;
  width: calc(100% - 100px);
  top: 0;
  left: 0;
  z-index: 1;
  height: auto;
}
.brand a {
  letter-spacing: 6px;
  font-weight: bold;
}
/* Style For Links*/
.nav-item {
  position: relative;
  overflow: hidden;
  padding: 15px 0px 10px 0px;
  margin: 0 15px;
  letter-spacing: 1px;
  font-weight: bold;
}
.nav-item:after {
  content: "";
  position: absolute;
  bottom: 4px;
  right: 0;
  width: 0%;
  height: 2px;
  background: var(--text-color);
  transition: all 0.32s ease-out;
}
.nav-item:hover {
  color: var(--text-color);
}
.nav-item:hover:after {
  left: 0;
  width: 100%;
}
.navbar-toggle {
  position: absolute;
  display: none;
  right: 35px;
  top: 16px;
  width: 30px;
  height: 30px;
  z-index: 1;
}
.toggle-bar {
  width: 20px;
  height: 2px;
  background: var(--link-text);
  top: 10px;
  right: 5px;
  position: absolute;
  transition: 0.26s ease all;
}
.toggle-bar:nth-child(2) {
  top: 15px;
}
.toggle-bar:nth-child(3) {
  top: 20px;
}
@media screen and (min-width:769px) {
    .navbar[data-expanded="true"] {
        height:auto !important;
    }
}
@media screen and (max-width: 1191px) {
  .navbar {
    padding: 35px 32px;
    width: calc(100% - 64px);
  }
}
@media screen and (max-width: 768px) {
  .navbar {
    flex-direction: column;
    justify-content: normal;
    background: var(--bg-color);
    padding: 10px 32px;
    height: 40px;
  }
  li {
    display: block;
    margin: 0;
  }
  .brand a {
    margin: 15px 0px;
  }
  .brand a,
  .nav-item {
    color: var(--link-text);
  }
  .brand a:hover,
  .nav-item:hover {
    color: var(--link-text);
  }
  .nav-item {
    margin: 0px;
  }
  .nav-item:after,
  .nav-item:hover:after {
    background: var(--link-text);
  }
  .navbar-toggle {
    display: block;
  }
  .navbar[data-theme="light"] {
    --link-text: #000;
  }
  .navbar[data-theme="dark"] {
    --link-text: #fff;
  }
  .navbar[data-expanded="false"] li > .nav-item,
  .navbar[data-expanded="false"] .nav-right > .nav-item {
    -webkit-clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%);
            clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%);
    visibility: hidden;
    opacity: 0;
    transition: opacity 0.16s ease 0.16s, visibility 0.01s ease 0.16s,
      -webkit-clip-path 0.16s ease;
    transition: opacity 0.16s ease 0.16s, visibility 0.01s ease 0.16s,
      clip-path 0.16s ease;
    transition: opacity 0.16s ease 0.16s, visibility 0.01s ease 0.16s,
      clip-path 0.16s ease, -webkit-clip-path 0.16s ease;
  }
  .navbar[data-expanded="true"] li > .nav-item,
  .navbar[data-expanded="true"] .nav-right > .nav-item {
    -webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
            clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
    visibility: visible;
    opacity: 1;
  }
  .navbar[data-expanded="true"] li:first-child > .nav-item {
    transition: opacity 0.16s ease 0.16s, visibility 0.01s ease,
      -webkit-clip-path 0.16s ease 0.16s;
    transition: opacity 0.16s ease 0.16s, visibility 0.01s ease,
      clip-path 0.16s ease 0.16s;
    transition: opacity 0.16s ease 0.16s, visibility 0.01s ease,
      clip-path 0.16s ease 0.16s, -webkit-clip-path 0.16s ease 0.16s;
  }
  .navbar[data-expanded="true"] li:nth-child(2) > .nav-item {
    transition: opacity 0.16s ease 0.2s, visibility 0.01s ease,
      -webkit-clip-path 0.16s ease 0.2s;
    transition: opacity 0.16s ease 0.2s, visibility 0.01s ease,
      clip-path 0.16s ease 0.2s;
    transition: opacity 0.16s ease 0.2s, visibility 0.01s ease,
      clip-path 0.16s ease 0.2s, -webkit-clip-path 0.16s ease 0.2s;
  }
  .navbar[data-expanded="true"] li:nth-child(3) > .nav-item {
    transition: opacity 0.16s ease 0.24s, visibility 0.01s ease,
      -webkit-clip-path 0.16s ease 0.24s;
    transition: opacity 0.16s ease 0.24s, visibility 0.01s ease,
      clip-path 0.16s ease 0.24s;
    transition: opacity 0.16s ease 0.24s, visibility 0.01s ease,
      clip-path 0.16s ease 0.24s, -webkit-clip-path 0.16s ease 0.24s;
  }
  .navbar[data-expanded="true"] li:nth-child(4) > .nav-item {
    transition: opacity 0.16s ease 0.28s, visibility 0.01s ease,
      -webkit-clip-path 0.16s ease 0.28s;
    transition: opacity 0.16s ease 0.28s, visibility 0.01s ease,
      clip-path 0.16s ease 0.28s;
    transition: opacity 0.16s ease 0.28s, visibility 0.01s ease,
      clip-path 0.16s ease 0.28s, -webkit-clip-path 0.16s ease 0.28s;
  }
  .navbar[data-expanded="true"] li:nth-child(5) > .nav-item {
    transition: opacity 0.16s ease 0.32s, visibility 0.01s ease,
      -webkit-clip-path 0.16s ease 0.32s;
    transition: opacity 0.16s ease 0.32s, visibility 0.01s ease,
      clip-path 0.16s ease 0.32s;
    transition: opacity 0.16s ease 0.32s, visibility 0.01s ease,
      clip-path 0.16s ease 0.32s, -webkit-clip-path 0.16s ease 0.32s;
  }
  .navbar[data-expanded="true"] li:nth-child(6) > .nav-item {
    transition: opacity 0.16s ease 0.36s, visibility 0.01s ease,
      -webkit-clip-path 0.16s ease 0.36s;
    transition: opacity 0.16s ease 0.36s, visibility 0.01s ease,
      clip-path 0.16s ease 0.36s;
    transition: opacity 0.16s ease 0.36s, visibility 0.01s ease,
      clip-path 0.16s ease 0.36s, -webkit-clip-path 0.16s ease 0.36s;
  }
  .navbar[data-expanded="true"] .nav-right > .nav-item {
    transition: opacity 0.16s ease 0.4s, visibility 0.01s ease,
      -webkit-clip-path 0.16s ease 0.4s;
    transition: opacity 0.16s ease 0.4s, visibility 0.01s ease,
      clip-path 0.16s ease 0.4s;
    transition: opacity 0.16s ease 0.4s, visibility 0.01s ease,
      clip-path 0.16s ease 0.4s, -webkit-clip-path 0.16s ease 0.4s;
  }
  .navbar[data-expanded="true"] {
    height: 100%;
  }
  .navbar[data-expanded="true"] .navbar-toggle > .toggle-bar:first-child {
    transform: rotate(135deg);
    top: 15px;
  }
  .navbar[data-expanded="true"] .navbar-toggle > .toggle-bar:nth-child(2) {
    opacity: 0;
  }
  .navbar[data-expanded="true"] .navbar-toggle > .toggle-bar:nth-child(3) {
    transform: rotate(-135deg);
    top: 15px;
  }
}
.App {
  height: 100%;
}
.img-hidden {
  display: none;
}
.slide-title {
  font-size: 4.375rem;
  margin: 0;
  -webkit-clip-path: polygon(0 0, 0 100%, 100% 100%, 100% 0);
          clip-path: polygon(0 0, 0 100%, 100% 100%, 100% 0);
}
.title-wrap {
  line-height: 4.375rem;
  height: 4.375rem;
}
.slider-container {
  position: absolute;
  width: 100vw;
  height: 100vh;
  display: flex;
  justify-content: center;
  flex-direction: column;
}
.slider-text-container {
  width: 1170px;
  margin: auto;
}
.slide-number-container {
  position: relative;
  overflow: hidden;
  height: 2.125rem;
  display: block;
  opacity: 0;
}
.number-wrap {
  height: 2.25rem;
  width: 100%;
  position: relative;
}
.slide-number {
  font-size: 2rem;
  position: relative;
  display: block;
  width: 80px;
  font-weight: 700;
}
.slide-number-small {
  font-size: 1.25rem;
  position: absolute;
  top: 0px;
  left: 40px;
}
.slide-title-container {
  position: relative;
  overflow: hidden;
  height: 4.375rem;
  margin: 30px 0;
}
.slide-info-box {
  position: absolute;
  bottom: 0;
  right: 0;
  background: var(--bg-color);
  padding: 30px 100px;
  -webkit-clip-path: polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%);
          clip-path: polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%);
}
.slide-info-box a {
  position: relative;
  color: var(--text-color-alt);
  font-size: 1.5rem;
  margin: 0;
  font-weight: bold;
  padding: 0px 0px 10px 0px;
  opacity: 0;
}
.slide-info-box a:after {
  content: "";
  position: absolute;
  bottom: 4px;
  right: 0;
  width: 0%;
  height: 2px;
  background: var(--text-color-alt);
  transition: all 0.32s ease-out;
}
.slide-info-box a:hover:after {
  left: 0;
  width: 100%;
}
.slide-info-box h4 {
  color: var(--grey);
  margin-top: 15px;
  opacity: 0;
}
.slide-info-container {
  width: 100%;
  max-width: 1170px;
  margin: 0 auto;
  display: inline-block;
  position: relative;
  opacity: 0;
}
.slide-info-text {
  position: absolute;
  bottom: 32px;
  left: 0;
}
.slide-info-container h4 {
  color: #cccccc;
}
.slide-info-wrap {
  height: 1.875rem;
  overflow-y: hidden;
  line-height: 21px;
}
.slide-info {
  margin: 0;
  padding: 5px 0px;
}
/* MQ */
@media screen and (max-width: 1191px) {
  .slide-info-container,
  .slider-text-container {
    width: calc(100% - 64px);
  }
}
@media screen and (max-width: 768px) {
  .slide-title {
    font-size: 3rem;
  }
  .slide-info-box {
    padding: 30px 50px;
  }
  .slide-info-box a {
    font-size: 1.25rem;
  }
}
@media screen and (max-width: 414px) {
  .slide-title {
    font-size: 2.5rem;
  }
  .slide-info-box {
    padding: 15px 25px;
  }
}
.overlay {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  width: 100%;
  height: 100%;
  margin: 0;
  overflow: hidden;
  opacity: 0;
  visibility: hidden;
}
.overlay-bg {
  position: absolute;
  background: var(--bg-color);
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  z-index: 0;
}
.overlay-navigation {
  position: absolute;
  z-index: 1;
  top: 0;
  left: 0;
  display: flex;
  justify-content: space-between;
  width: calc(100% - 300px);
  padding: 25px 150px;
}
.overlay-title {
  color: var(--text-color-alt);
}
.overlay-title {
  -webkit-margin-after: 10px;
          margin-block-end: 10px;
}
.overlay-sub {
  color: var(--grey);
  -webkit-margin-before: 0px;
          margin-block-start: 0px;
}
.overlay-close {
  position: relative;
  color: var(--text-color-alt);
  font-weight: bold;
  padding: 15px 0px 10px 0px;
  margin: 0 5px;
}
.overlay-close:after {
  content: "";
  position: absolute;
  bottom: 4px;
  right: 0;
  width: 0%;
  height: 2px;
  background: var(--text-color-alt);
  transition: all 0.32s ease-out;
}
.overlay-close:hover:after {
  left: 0;
  width: 100%;
}
.overlay-preview-wrap {
  display: flex;
  flex-direction: row;
  width: 200%;
  position: absolute;
  padding-left: 135px;
}
.overlay-slide-container {
  position: relative;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  width: calc(100% - 150px);
}
.overlay-nav-buttons {
  display: flex;
  align-items: center;
  -webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%);
          clip-path: polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%);
}
.overlay-nav-heading,
.overlay-nav-buttons {
  -webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%);
          clip-path: polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%);
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
}
.overlay-slide-preview {
  position: relative;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  height: 500px;
  margin: 0px 15px;
  -webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%);
          clip-path: polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%);
  cursor: pointer;
}
.overlay-slide-preview > img {
  width: 100%;
  cursor: pointer;
}
.overlay-preview-title {
  position: absolute;
  top: 45%;
  left: 50%;
  transform: translate(-50%, -50%);
  color: var(--preview-text);
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
}
.overlay-preview-title-text {
  -webkit-clip-path: polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%);
          clip-path: polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%);
  display: inline-block;
  font-size: 4em;
}
.overlay-preview-title-number {
  font-size: 1.5em;
  position: absolute;
  bottom: 25px;
  left: -60px;
  opacity: 0;
}
/* MQ */
@media screen and (max-width: 1191px) {
  .overlay-navigation {
    width: calc(100% - 150px);
    padding: 25px 75px;
  }
  .overlay-preview-wrap {
    padding-left: 60px;
  }
  .overlay-preview-title-number {
    bottom: 28px;
    left: -45px;
  }
}
@media screen and (max-width: 991px) {
  .overlay-preview-title-number {
    left: -40px;
  }
  .overlay-preview-title-text {
    font-size: 3rem;
  }
  .overlay-preview-title-number {
    bottom: 21px;
  }
}
@media screen and (max-width: 768px) {
  .overlay-preview-title-number {
    left: -35px;
  }
  .overlay-preview-title-text {
    font-size: 2.75rem;
  }
  .overlay-preview-title-number {
    bottom: 15px;
  }
}
@media screen and (max-width:700px) {
    .overlay-preview-title-number {
        display:none;
    }
}
@media screen and (max-width: 640px) {
  .overlay-preview-title-text {
    font-size: 2rem;
  }
}
@media screen and (max-width: 414px) {
  .overlay-preview-title-text {
    font-size: 1.5rem;
  }
  .overlay-navigation {
    width: calc(100% - 100px);
    padding: 25px 50px;
  }
  .overlay-preview-wrap {
    padding-left: 35px;
  }
}
@media screen and (max-height: 700px) {
  .overlay-slide-preview {
    height: 350px;
  }
}
@media screen and (max-height: 600px) {
  .overlay-slide-preview {
    height: 300px;
    margin:0px 5px;
  }
}
.preloader {
  width: 100vw;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--bg-color);
  z-index: 2;
  position: fixed;
  bottom: 0;
  top: 0;
  left: 0;
  right: 0;
}
.box {
  height: 40px;
  position: relative;
  padding: 15px;
}
.box-clip {
  -webkit-clip-path: polygon(100% 0%, 100% 0%, 100% 100%, 100% 100%);
          clip-path: polygon(100% 0%, 100% 0%, 100% 100%, 100% 100%);
}
.box-clip,
.box-clip2 {
  background: var(--bg-color);
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border: 1;
}
.box-clip2 {
  background: var(--text-color-alt);
  -webkit-clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%);
          clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%);
}
.preloader p {
  font-size: 2rem;
  margin: 0;
  color: var(--text-color-alt);
}

.slider-controls {
  position: relative;
  opacity: 0;
}
button {
  background: none;
  border: none;
  cursor: pointer;
  padding: 0px;
}
.slide-prev-btn,
.slide-next-btn {
  position: relative;
  width: 30px;
  height: 20px;
}
.slide-prev-btn {
  margin: 0px 10px 0px 0px;
}
.slide-next-btn {
  margin: 0px 10px;
}
.slide-prev-btn:before,
.slide-next-btn:before,
.slide-prev-btn:after,
.slide-next-btn:after {
  position: absolute;
  content: "";
}
.slide-prev-btn:before,
.slide-next-btn:before {
  width: 10px;
  height: 10px;
  border-style: solid;
  border-color: #fff;
  border-right: 2px;
  border-bottom: 2px;
  border-radius: 2px;
  background: transparent;
  top: 5px;
}
.slide-prev-btn:before {
  left: 0px;
  transform: rotate(-45deg);
}
.slide-next-btn:before {
  right: 0px;
  transform: rotate(135deg);
}
.slide-prev-btn:after,
.slide-next-btn:after {
  width: 30px;
  height: 3px;
  background: #fff;
  left: 0;
}
.slide-overlay-btn {
  position: relative;
  width: 20px;
  height: 20px;
  margin-left: 10px;
}
.slide-overlay-btn:after,
.slide-overlay-btn:before {
  position: absolute;
  content: "";
  width: 8px;
  height: 18px;
  top: 2px;
  left: 0;
  background: linear-gradient(
    #fff 0%,
    #fff 42%,
    transparent 43%,
    transparent 53%,
    #fff 54%,
    #fff 100%
  );
}
.slide-overlay-btn:after {
  left: 10px;
}
.slide-footer-text {
  display: block;
}
.slide-image {
  position: fixed;
  width: 100%;
  height: 100%;
  z-index: -1;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
}
.theme-toggle {
  position: relative;
  z-index: 100;
  width: 32px;
  height: 20px;
  background: var(--text-color-alt);
  border-radius: 10px;
  margin: 5px 10px 2px 5px;
}
.theme-toggle span {
  position: absolute;
  background: var(--bg-color);
  width: 12px;
  height: 12px;
  border-radius: 50%;
  top: 4px;
  left: 4px;
}
JS
function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}const { useRef, useState, useEffect, style, Fragment, forwardRef, Component, createRef } = React;

const onloadAnimation = controls => {
  const tl = gsap.timeline();
  tl.fromTo(
  ".slide-number-container",
  { x: "3%" },
  { opacity: 1, x: 0, duration: 0.32 },
  "in+=0.56").

  fromTo(".slide-title", { y: "200%" }, { y: 0, duration: 0.64 }, "in").
  to(".slide-info-container", { opacity: 1 }, "in+=0.64")
  // info box
  .to(
  ".slide-info-box",
  { "clip-path": "polygon(0% 100%, 100% 100%, 100% 0%, 0% 0%)" },
  "in+=0.64").

  to(".slide-info-box a", { opacity: 1 }, "in+=0.82").
  to(".slide-info-box h4", { opacity: 1 }, "in+=0.82")
  // controls -
  .to(controls, { opacity: 1, duration: 0.32 }, "in+=0.64");
};

// ANIMATE SLIDE
const animateSlide = (
titleWrap,
numberWrap,
setSlidingState,
wrapTransform) =>
{
  const tl = gsap.timeline();
  // hide title clip
  tl.to(
  ".slide-title",
  { "clip-path": "polygon(0% 0%, 0% 100%, 0% 100%, 0% 0%)", duration: 0.32 },
  "in").

  to(
  titleWrap,
  { y: wrapTransform, duration: 0.44, ease: "power2" },
  "in+=0.32")

  // animate the number container
  .to(
  numberWrap,
  { y: wrapTransform, duration: 0.4, ease: "power2" },
  "in+=0.32")

  // animate the number
  .to(".slide-number", { opacity: 0, duration: 0.32 }, "in")
  // reset the number animation
  .set(".slide-number", { opacity: 1 }, "in+=0.32")
  // show title clip
  .to(".slide-title", {
    "clip-path": "polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%)",
    duration: 0.64 })

  // animate slide info text container
  .to(
  ".slide-info",
  { y: wrapTransform, duration: 0.32, ease: "power2" },
  "in+=0.32")

  // animate info text
  .to(".slide-info", { opacity: 0, duration: 0.32 }, "in").
  to(".slide-info", { opacity: 1, duration: 0.32 }, "in+=0.32").
  add(setSlidingState, 1.1);
};

// ANIMATE SLIDER WHEN EXPAND BUTTON IS CLICKED
const animateSliderOut = () => {
  const tl = gsap.timeline({ onComplete: () => {} });
  tl.to(
  ".slide-title",
  {
    "clip-path": "polygon(0% 0%, 0% 100%, 0% 100%, 0% 0%)",
    duration: 0.4 },

  "out").

  to(
  ".slide-number",
  {
    y: "+=100%" },

  "out").

  fromTo(
  ".slide-number",
  {
    "clip-path": "polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%)" },

  {
    "clip-path": "polygon(0% 100%, 0% 100%, 100% 100%, 100% 100%)",
    duration: 0.08 },

  "out").

  to(
  ".slide-info-box",
  {
    opacity: 0 },

  "out");

};

// ANIMATE OVERLAY WHEN EXPAND BUTTON IS CLICKED
const animateOverlayIn = (overlay, navbar, setExpandingState) => {
  const tl = gsap.timeline({ delay: 0.4, onComplete: () => {} });
  tl
  // navbar
  .to(
  navbar,
  {
    y: "-100%" },

  "in")

  // overlay
  .to(
  overlay,
  {
    autoAlpha: 1 },

  "in+=0.08").

  fromTo(
  ".overlay-nav-heading",
  {
    "clip-path": "polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%)" },

  {
    "clip-path": "polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)",
    duration: 0.48,
    ease: "power1.inOut" },

  "in").

  fromTo(
  ".overlay-nav-buttons",
  {
    "clip-path": "polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%)" },

  {
    "clip-path": "polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)",
    duration: 0.48,
    ease: "power1.inOut" },

  "in")

  // slides
  .fromTo(
  ".overlay-slide-preview",
  {
    "clip-path": "polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%)" },

  {
    "clip-path": "polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)",
    stagger: 0.32,
    duration: 0.8,
    ease: "expo.inOut" },

  "in+=0.1").

  fromTo(
  ".overlay-preview-title-text",
  {
    "clip-path": "polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%)" },

  {
    "clip-path": "polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)",
    stagger: 0.32,
    duration: 0.56,
    ease: "sine" },

  "in+=0.48").

  fromTo(
  ".overlay-preview-title-number",
  {
    opacity: 0 },

  {
    opacity: 1,
    stagger: 0.32,
    duration: 0.48 },

  "in+=0.48").

  add(setExpandingState, 1);
};

// ANIMATE THE OVERLAY WHEN CLOSE BUTTON IS CLICKED
const animateOverlayOut = (overlay, navbar, callback) => {
  const tl = gsap.timeline({
    onComplete: () => {
      gsap.set(overlay, { visibility: "hidden" });
    } });

  tl.to(
  ".slide-title",
  {
    "clip-path": "polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%)",
    duration: 0.64 },

  "in+=0.32").

  to(".slide-info-box", { opacity: 1 }, "in+=0.32").
  to(
  ".slide-number",
  {
    "clip-path": "polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%)",
    y: "-=100%" },

  "in+=0.32").

  to(overlay, { opacity: 0 }, "in").
  to(navbar, { y: 0, duration: 0.64 }, "in").
  add(callback, 0.96);
};
// ANIMATE THE OVERLAY AND THE SLIDER WHEN OVERLAY IMAGE IS CLICKED
const animateImg = (overlay, callback, navbar) => {
  const tl = gsap.timeline({
    defaults: { duration: 0.4 },
    onComplete: () => {
      gsap.set(".overlay-preview-wrap", { clearProps: "width,x,padding" });
      gsap.set(".overlay-slide-preview", { clearProps: "margin,width,height" });
      gsap.set(".overlay-slide-container", {
        clearProps: "padding-left,height,overflow,width" });

      gsap.set(".overlay-slide-container", {
        clearProps: "height,overflow,width" });

      gsap.set(".overlay-preview-title-text", { clearProps: "clip-path,y" });
      gsap.set(".overlay-preview-title-number", { clearProps: "opacity" });
    } });

  tl
  // Overlay components
  .set(".overlay-slide-container", { width: "100%" }, "animate").
  to(
  ".overlay-slide-container",
  { height: "100%", overflow: "hidden", width: "100%" },
  "animate").

  to(
  ".overlay-slide-preview",
  { margin: "0", width: "100vw", height: "100vh" },
  "animate")

  // hide overlay image text
  .to(
  ".overlay-preview-title-text",
  {
    "clip-path": "polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%)",
    duration: 0.24 },

  "animate").

  to(
  ".overlay-preview-title-number",
  { opacity: 0, duration: 0.24 },
  "animate").

  to(
  overlay,
  {
    opacity: 0,
    onComplete: () => {
      gsap.set(overlay, { visibility: "hidden" });
    } },

  "animate+=0.32").

  add(callback, 0.72)
  // Animating the slider components
  .fromTo(
  ".slide-title",
  { "clip-path": "polygon(0% 0%, 0% 100%, 0% 100%, 0% 0%)" },
  { "clip-path": "polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%)", duration: 0.64 },
  0.48).

  fromTo(
  ".slide-number",
  { "clip-path": "polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%)" },
  {
    "clip-path": "polygon(0% 100%, 100% 100%, 100% 0%, 0% 0%)",
    y: "-=100%" },

  0.48)

  // show slider info box
  .to(".slide-info-box", { opacity: 1 }, 0.48)
  // animating the navbar
  .to(navbar, { y: 0 }, 0.4);
};

const animatePreview = (x, slideCount, numberTransform) => {
  const tl = gsap.timeline({ defaults: { duration: 0.4 } });
  tl
  // overlay
  .to(".overlay-preview-wrap", { "padding-left": "0px", x: x, width: "400%" })
  // slider
  .set(".slider-container", {
    background: `url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/590856/${slideCount}.jpg') center center / cover` }).

  set(".number-wrap", { y: numberTransform }).
  set(".title-wrap", { y: numberTransform }).
  set(".slide-info", { y: numberTransform });
};

const SlidePreview = forwardRef((props, ref) => {
  return /*#__PURE__*/(
    React.createElement("div", {
      className: "overlay-slide-preview",
      style: props.styles,
      onClick: props.click,
      ref: ref,
      id: props.id }, /*#__PURE__*/

    React.createElement("h4", { className: "overlay-preview-title" }, /*#__PURE__*/
    React.createElement("span", { className: "overlay-preview-title-number" }, props.number), /*#__PURE__*/
    React.createElement("span", { className: "overlay-preview-title-text" }, props.category))));



});

const Toggle = () => {
  const getTheme = string => {
    return window.localStorage.getItem("theme") === string;
  };
  const setTheme = () => {
    if (getTheme("dark")) {
      gsap.set(":root", {
        "--bg-color": "#211f1f",
        "--text-color-alt": "#FFF",
        duration: 0.32 });

      // set toggle position depending on theme state
      gsap.set(".theme-toggle span", { x: 12 });
    } else {
      window.localStorage.setItem("theme", "light");
    }
  };
  const toggleTheme = () => {
    if (getTheme("") || getTheme("light")) {
      gsap.to(":root", {
        "--bg-color": "#211f1f",
        "--text-color-alt": "#FFF",
        duration: 0.32 });

      gsap.to(".theme-toggle span", { x: 12, duration: 0.24 });
      window.localStorage.setItem("theme", "dark");
    } else {
      gsap.to(":root", {
        "--bg-color": "#FFF",
        "--text-color-alt": "#000",
        "--grey": "#808080" });

      gsap.to(".theme-toggle span", { x: 0, duration: 0.24 });
      window.localStorage.setItem("theme", "light");
    }
  };
  useEffect(() => {
    getTheme();
    setTheme();
  });

  return /*#__PURE__*/(
    React.createElement("button", {
      role: "switch",
      "aria-checked": "true",
      className: "theme-toggle",
      onClick: toggleTheme }, /*#__PURE__*/

    React.createElement("span", null)));


};

const Overlay = forwardRef((props, ref) => {
  const [images] = useState([
  { id: "1", category: "Nature.", number: "01." },
  { id: "2", category: "Office.", number: "02." },
  { id: "3", category: "Extension.", number: "03." },
  { id: "4", category: "Custom.", number: "04." }]);


  const slideRef = useRef([]);

  useEffect(() => {
    // Enable dragging
    new Draggable(".overlay-preview-wrap", {
      type: "x",
      bounds: ".overlay-slide-container",
      dragResistance: 0.55,
      inertia: true,
      throwResistance: 3500,
      onDrag: () => {
        gsap.set(".overlay-slide-preview", { cursor: "grab" });
      },
      onDragEnd: () => {
        gsap.set(".overlay-slide-preview", { cursor: "pointer" });
      } });

  }, []);

  const slides = images.map(item => {
    return /*#__PURE__*/(
      React.createElement(SlidePreview, {
        key: item.id,
        styles: {
          background: `url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/590856/${item.id}.jpg) center center / cover` },

        id: `preview-${item.id}`,
        click: props.imgClick,
        number: item.number,
        category: item.category,
        ref: slide => slideRef.current[item] = slide }));


  });

  return /*#__PURE__*/(
    React.createElement(Fragment, null, /*#__PURE__*/
    React.createElement("div", { ref: ref, className: "overlay" }, /*#__PURE__*/
    React.createElement("div", { className: "overlay-bg" }), /*#__PURE__*/
    React.createElement("div", { className: "overlay-navigation" }, /*#__PURE__*/
    React.createElement("div", { className: "overlay-nav-heading" }, /*#__PURE__*/
    React.createElement("h3", { className: "overlay-title" }, "Select your purpose"), /*#__PURE__*/
    React.createElement("h4", { className: "overlay-sub" }, "You can drag and click to select")), /*#__PURE__*/

    React.createElement("nav", { className: "overlay-nav-buttons" }, /*#__PURE__*/
    React.createElement(Toggle, null), /*#__PURE__*/
    React.createElement("button", { className: "overlay-close", onClick: props.close }, "Close"))), /*#__PURE__*/




    React.createElement("div", { className: "overlay-slide-container" }, /*#__PURE__*/
    React.createElement("div", { className: "overlay-preview-wrap" }, slides)))));




});

const Preloader = forwardRef((props, ref) => {
  const boxRef = useRef();
  const box2Ref = useRef();
  const textRef = useRef();
  useEffect(() => {
    const tl = gsap.timeline({ repeat: -1, repeatDelay: 0.2 });
    tl.to(textRef.current, { opacity: 0, duration: 0.4 }, "o").
    to(
    boxRef.current,
    {
      "clip-path": "polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)",
      duration: 0.4 },

    "o").

    to(boxRef.current, {
      "clip-path": "polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%)",
      duration: 0.4 }).

    to(textRef.current, { opacity: 1, duration: 0.4 }, "n").
    to(
    box2Ref.current,
    {
      "clip-path": "polygon(100% 0%, 0% 0%, 0% 100%, 100% 100%)",
      duration: 0.4 },

    "n").

    to(
    box2Ref.current,
    {
      "clip-path": "polygon(100% 0%, 100% 0%, 100% 100%, 100% 100%)",
      duration: 0.4 },

    "m");

  }, []);
  return /*#__PURE__*/(
    React.createElement("div", { className: "preloader", ref: ref }, /*#__PURE__*/
    React.createElement("div", { className: "box" }, /*#__PURE__*/
    React.createElement("p", { ref: textRef }, "Loading..."), /*#__PURE__*/
    React.createElement("div", { className: "box-clip", ref: boxRef }), /*#__PURE__*/
    React.createElement("div", { className: "box-clip2", ref: box2Ref }))));



});

const Navbar = forwardRef((props, ref) => {

  useEffect(() => {
    let theme = window.localStorage.getItem("theme");
    if (theme === "light") {
      ref.current.dataset.theme = 'light';
    }
    if (theme === "dark") {
      ref.current.dataset.theme = "dark";
    }
  });
  const toggleNav = () => {
    ref.current.dataset.expanded === "false" ? ref.current.dataset.expanded = 'true' : ref.current.dataset.expanded = 'false';
    ref.current.dataset.expanded === "true" ? gsap.fromTo(ref.current, { height: "40px" }, { height: "100%", duration: 0.40 }) : gsap.to(ref.current, { height: "40px", duration: 0.40 });
  };
  return /*#__PURE__*/(
    React.createElement("header", null, /*#__PURE__*/
    React.createElement("nav", { className: "navbar", ref: ref, "data-test": "component-navbar", "data-theme": "light", "data-expanded": "false" }, /*#__PURE__*/
    React.createElement("button", { className: "navbar-toggle", type: "button", "aria-expanded": "false", "aria-label": "Toggle navigation", onClick: toggleNav }, /*#__PURE__*/
    React.createElement("span", { className: "toggle-bar" }), /*#__PURE__*/
    React.createElement("span", { className: "toggle-bar" }), /*#__PURE__*/
    React.createElement("span", { className: "toggle-bar" })), /*#__PURE__*/

    React.createElement("div", { className: "brand" }, /*#__PURE__*/
    React.createElement("a", { href: "/" }, "ARK-SHELTER")), /*#__PURE__*/

    React.createElement("div", { className: "nav-center" }, /*#__PURE__*/
    React.createElement("ul", null, /*#__PURE__*/
    React.createElement("li", null, /*#__PURE__*/React.createElement("a", { className: "nav-item", href: "#" }, "Home")), /*#__PURE__*/
    React.createElement("li", null, /*#__PURE__*/React.createElement("a", { className: "nav-item", href: "#" }, "Nature")), /*#__PURE__*/
    React.createElement("li", null, /*#__PURE__*/React.createElement("a", { className: "nav-item", href: "#" }, "Offices")), /*#__PURE__*/
    React.createElement("li", null, /*#__PURE__*/React.createElement("a", { className: "nav-item", href: "#" }, "Extension")), /*#__PURE__*/
    React.createElement("li", null, /*#__PURE__*/React.createElement("a", { className: "nav-item", href: "#" }, "Custom")), /*#__PURE__*/
    React.createElement("li", null, /*#__PURE__*/React.createElement("a", { className: "nav-item", href: "#" }, "About")))), /*#__PURE__*/


    React.createElement("div", { className: "nav-right" }, /*#__PURE__*/
    React.createElement("a", { className: "nav-item", href: "/#" }, "Contact")))));




});



const SliderControls = forwardRef((props, ref) => {
  return /*#__PURE__*/(
    React.createElement("div", { className: "slider-controls", ref: ref }, /*#__PURE__*/
    React.createElement("button", { className: "slide-prev-btn", onClick: props.prev }), /*#__PURE__*/
    React.createElement("button", { className: "slide-next-btn", onClick: props.next }), /*#__PURE__*/
    React.createElement("button", { onClick: props.expand, className: "slide-overlay-btn" })));


});

class App extends Component {constructor(...args) {super(...args);_defineProperty(this, "state",
    {
      slides: [
      {
        id: "1",
        title: "Back to nature.",
        slideNumber: "01",
        text: "Discover nature.",
        image: "https://s3-us-west-2.amazonaws.com/s.cdpn.io/590856/1.jpg" },

      {
        id: "2",
        title: "Chill in the office.",
        slideNumber: "02",
        text: "Step into your office.",
        image: "https://s3-us-west-2.amazonaws.com/s.cdpn.io/590856/2.jpg" },

      {
        id: "3",
        title: "From dreams to reality.",
        slideNumber: "03",
        text: "Go big or go home.",
        image: "https://s3-us-west-2.amazonaws.com/s.cdpn.io/590856/3.jpg" },

      {
        id: "4",
        title: "Make a wish.",
        slideNumber: "04",
        text: "Push it to the limit.",
        image: "https://s3-us-west-2.amazonaws.com/s.cdpn.io/590856/4.jpg" }],


      isExpanded: false,
      slideCount: 1,
      isSliding: false,
      isExpanding: false,
      isShrinking: false,
      imgsLoaded: 0,
      isLoaded: false });_defineProperty(this, "titleWrapRef",


    createRef());_defineProperty(this, "numberWrapRef",
    createRef());_defineProperty(this, "navbar",
    createRef());_defineProperty(this, "overlay",
    createRef());_defineProperty(this, "sliderContainer",
    createRef());_defineProperty(this, "controlsRef",
    createRef());_defineProperty(this, "preloaderRef",
    createRef());_defineProperty(this, "imageRef",
    createRef());_defineProperty(this, "loadImages",

    () => {
      this.setState(prevState => ({
        imgsLoaded: prevState.imgsLoaded + 1 }));

      if (this.state.imgsLoaded === 3) {
        gsap.to(this.preloaderRef.current, {
          y: "-100%",
          duration: 1,
          onStart: () => {
            // Animate the different elements in
            onloadAnimation(this.controlsRef.current);
          },
          onComplete: () => {
            gsap.set(this.preloaderRef.current, { display: "none" });
            this.setState({ isLoaded: true });
          } });

      }
    });_defineProperty(this, "expand",
    () => {
      // Expand Overlay
      if (
      !this.state.isExpanded &&
      !this.state.isExpanding &&
      !this.state.isSliding)
      {
        this.setState({ isExpanding: !this.state.isExpanding }, () => {
          animateSliderOut();
          animateOverlayIn(this.overlay.current, this.navbar.current, () => {
            this.setState({ isExpanding: false, isExpanded: true });
          });
        });
      }
      // Hide Overlay
      if (
      this.state.isExpanded &&
      !this.state.isExpanding &&
      !this.state.isSliding)
      {
        this.setState({ isExpanding: !this.state.isExpanding }, () => {
          animateOverlayOut(this.overlay.current, this.navbar.current, () => {
            this.setState({ isExpanding: false, isExpanded: false });
          });
        });
      }
    });_defineProperty(this, "prevSlide",
    () => {
      if (this.state.slideCount >= 2 && !this.state.isSliding) {
        this.setState(
        prevState => ({
          slideCount: prevState.slideCount - 1,
          isSliding: true }),

        () => {
          gsap.set(this.sliderContainer.current, {
            background: `url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/590856/${this.state.slideCount}.jpg) center center / cover` });

          animateSlide(
          this.titleWrapRef.current,
          this.numberWrapRef.current,
          () => this.setState({ isSliding: false }),
          "+=100%");

        });

      }
    });_defineProperty(this, "nextSlide",
    () => {
      if (this.state.slideCount <= 3 && !this.state.isSliding) {
        this.setState(
        prevState => ({
          slideCount: prevState.slideCount + 1,
          isSliding: true }),

        () => {
          gsap.set(this.sliderContainer.current, {
            background: `url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/590856/${this.state.slideCount}.jpg) center center / cover` });

          animateSlide(
          this.titleWrapRef.current,
          this.numberWrapRef.current,
          () => this.setState({ isSliding: false }),
          "-=100%");

        });

      }
    });_defineProperty(this, "animateImgClick",
    e => {
      if (!this.state.isShrinking) {
        this.setState({ isShrinking: true }, () =>
        animateImg(
        this.overlay.current,
        () =>
        this.setState({
          isExpanded: !this.state.isExpanded,
          isShrinking: false }),

        this.navbar.current));


        // Updating the sliders position based on what image was clicked in the overlay
        if (e.currentTarget.id === "preview-1") {
          this.setState({ slideCount: 1 }, () => animatePreview(0, 1, "0%"));
        }
        if (e.currentTarget.id === "preview-2") {
          this.setState({ slideCount: 2 }, () =>
          animatePreview("-25%", 2, "-100%"));

        }
        if (e.currentTarget.id === "preview-3") {
          this.setState({ slideCount: 3 }, () =>
          animatePreview("-50%", 3, "-200%"));

        }
        if (e.currentTarget.id === "preview-4") {
          this.setState({ slideCount: 4 }, () =>
          animatePreview("-75%", 4, "-300%"));

        }
      }
    });}
  render() {
    const slideNumbers = this.state.slides.map(item => {
      return /*#__PURE__*/(
        React.createElement("span", { className: "slide-number", key: item.id },
        item.slideNumber));


    });
    const slideTitles = this.state.slides.map(item => {
      return /*#__PURE__*/(
        React.createElement("h1", { className: "slide-title", key: item.id },
        item.title));


    });
    const slideText = this.state.slides.map(item => {
      return /*#__PURE__*/(
        React.createElement("h3", { className: "slide-info", key: item.id },
        item.text));


    });
    const images = this.state.slides.map(item => {
      return /*#__PURE__*/(
        React.createElement("img", {
          className: "img-hidden",
          src: item.image,
          key: item.id,
          ref: img => this.imageRef = img,
          onLoad: this.loadImages,
          alt: "" }));


    });
    return /*#__PURE__*/(
      React.createElement("div", { className: "App" },
      !this.state.isLoaded ? /*#__PURE__*/React.createElement(Preloader, { ref: this.preloaderRef }) : null, /*#__PURE__*/
      React.createElement(Navbar, { ref: this.navbar }),
      images, /*#__PURE__*/
      React.createElement("div", {
        className: "slider-container",
        ref: this.sliderContainer,
        style: {
          background: `url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/590856/${this.state.slideCount}.jpg) center center / cover` } }, /*#__PURE__*/


      React.createElement("div", { className: "slider-text-container" }, /*#__PURE__*/
      React.createElement("div", { className: "slide-number-container" }, /*#__PURE__*/
      React.createElement("div", { className: "number-wrap", ref: this.numberWrapRef },
      slideNumbers), /*#__PURE__*/

      React.createElement("span", { className: "slide-number-small" }, "/ 04")), /*#__PURE__*/

      React.createElement("div", { className: "slide-title-container" }, /*#__PURE__*/
      React.createElement("div", { className: "title-wrap", ref: this.titleWrapRef },
      slideTitles)), /*#__PURE__*/


      React.createElement(SliderControls, {
        prev: this.prevSlide,
        next: this.nextSlide,
        expand: this.expand,
        ref: this.controlsRef })), /*#__PURE__*/


      React.createElement("div", { className: "slide-info-container" }, /*#__PURE__*/
      React.createElement("div", { className: "slide-info-text" }, /*#__PURE__*/
      React.createElement("div", { className: "slide-info-wrap" }, slideText), /*#__PURE__*/
      React.createElement("h4", null, "Scroll for more"))), /*#__PURE__*/


      React.createElement("div", { className: "slide-info-box" }, /*#__PURE__*/
      React.createElement("a", { href: "/#" }, "Need more info & prices?"), /*#__PURE__*/
      React.createElement("h4", null, "Download our brochure now"))), /*#__PURE__*/


      React.createElement(Overlay, {
        close: this.expand,
        ref: this.overlay,
        imgClick: e => this.animateImgClick(e) })));



  }}


ReactDOM.render( /*#__PURE__*/React.createElement(App, null), document.getElementById("app"));

Post a Comment

0Comments
Post a Comment (0)