0

I'm trying to write some code to cause a transition on load, so I basically have some jquery adding a class, transition-left to a div and some css that says to move left if it has the class transition-left. However, even though the class is being added, the transition isn't happening. I just don't know why that is the case. Here is my code.

$(document).ready(function () {
    $("#curtain-left").addClass("transition-left");
});

$(document).ready(function () {
    $("#curtain-right").addClass("transition-right");
});
.curtain {
	width: 100vw;
	height: 100vh;
	overflow: hidden;
	z-index: 0;

	/* CSS variables to prevent duplication below */
	--piece-width: 100px;
}

.curtain .content {
	/* I used flex since I'm more comfortable with that, but you can use floats if you prefer. */
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 100%;
	z-index: 0;
}

.curtain-panel {
	display: flex;
	align-items: center;
	position: absolute;
	width: 50%;
	height: 100%;

	transition: left, right;
	transition-duration: 3s;
}

.curtain-panel.left {
	left: 0;
	justify-content: end;
}

.curtain-panel.right {
	right: 0;
}

.curtain-panel::before {
	content: "";
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 1;

	background-color: #333;
}

.curtain-piece-left {
	width: var(--piece-width);
	height: auto;
	z-index: 2;
	margin: calc(100% - var(--piece-width) / 2);
}

.curtain-piece-right {
	width: var(--piece-width);
	height: auto;
	z-index: 2;
	margin: calc(var(--piece-width) / -2);
}

.transition-left{
	left: -100%;
}

.transition-right{
	right: -100%;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<!DOCTYPE html>
<html>
  <head>
  <link rel="stylesheet" href="css/curtain.css" />
  <link rel="stylesheet" href="css/index.css" />
  <link href="./css/bootstrap.css" rel="stylesheet">
  <link href="./css/index.css" rel="stylesheet">
  <link href="./css/starter-template.css" rel="stylesheet">
    <!-- Let browser know website is optimized for mobile
      <meta name="viewport" content="width=device-width, initial-scale=1.0"/> -->
  </head>

  <body>
    <div class="curtain">
      <div class="curtain-panel left">
        <img src="https://getsharex.com/img/ShareX_Icon_Full.ico" class="curtain-piece-left" id="curtain-left"/>
      </div>
      <div class="curtain-panel right">
        <img src="https://lh3.googleusercontent.com/proxy/p0uNfB1-JwEd_zQfXuiMQmhxkAszQSH19V-ff6kH9_5LS4eWHsZdFQnshtP3tSLDhBuRNb2AV0RD9UGbci0bEeNeHs4Acr5RABX5TJlrQXykGCgt8wUnEgFkGLlIPm-H4Tg7oHiwfH0MnJzdrg" class="curtain-piece-right"  id="curtain-right"/>
      </div>
      <div class="content">
        <nav class="navbar navbar-expand-md navbar-dark bg-purple fixed-top">
          <a class="navbar-brand" href="#">a</a>
          <button
            class="navbar-toggler"
            type="button"
            data-toggle="collapse"
            data-target="#navbarsExampleDefault"
            aria-controls="navbarsExampleDefault"
            aria-expanded="false"
            aria-label="Toggle navigation"
          >
            <span class="navbar-toggler-icon"></span>
          </button>

          <div class="collapse navbar-collapse" id="navbarsExampleDefault">
            <ul class="navbar-nav mr-auto">
              <li class="nav-item">
                <a class="nav-link" href="#"
                  >Home <span class="sr-only">(current)</span></a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#">b</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#">c</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#">d</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#">e</a>
              </li>
            </ul>
          </div>
        </nav>

        <main role="main" class="container">
          <div class="starter-template">
            <h1>Template</h1>
            <p class="lead">
              Use this document as a template for other pages.<br />
              Keep in mind, Bootstrap documentation might be needed to build
              components of the other pages.
            </p>
          </div>
        </main>
      </div>
    </div>
    <!-- Bootstrap core JavaScript -->
    <script
      src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
      integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
      crossorigin="anonymous"
    ></script>

    <script src="./js/bootstrap.min.js"></script>
    <script src="js/curtain.js"></script>
    <script src="jquery-3.4.1.min.js"></script>
  </body>
</html>

3
  • you probably want window load and not document ready Commented Apr 7, 2020 at 19:32
  • What's weird is that the classes are being added, but the elements are not adjusting accordingly. Commented Apr 7, 2020 at 19:35
  • The image has the id..... image has nothing to do with the position Commented Apr 7, 2020 at 19:41

1 Answer 1

2

You are adding it in the wrong place. Check out my version:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
</head>
<body>
    <style>
        body{
            margin: 0;
            padding: 0;
            font-size: 14px;
            overflow-x: hidden;
        }

        .curtain {
  width: 100vw;
  height: 100vh;
  overflow: hidden;
  z-index: 0;

  /* CSS variables to prevent duplication below */
  --piece-width: 100px;
}

.curtain .content {
  /* I used flex since I'm more comfortable with that, but you can use floats if you prefer. */
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  z-index: 0;
}

.curtain-panel {
  display: flex;
  align-items: center;
  position: absolute;
  width: 50%;
  height: 100%;

  transition: left, right;
  transition-duration: 3s;
}

.curtain-panel.left {
  left: 0;
  justify-content: end;
}

.curtain-panel.right {
  right: 0;
}

.curtain-panel::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1;

  background-color: #333;
}

.curtain-piece-left {
  width: var(--piece-width);
  height: auto;
  z-index: 2;
  margin: calc(100% - var(--piece-width) / 2);
}

.curtain-piece-right {
  width: var(--piece-width);
  height: auto;
  z-index: 2;
  margin: calc(var(--piece-width) / -2);
}

.transition-left{
  left: -100% !important;
}

.transition-right{
  right: -100% !important;
}

    </style>

<div class="curtain">
      <div class="curtain-panel left">
        <img src="https://getsharex.com/img/ShareX_Icon_Full.ico" class="curtain-piece-left" id="curtain-left"/>
      </div>
      <div class="curtain-panel right">
        <img src="https://lh3.googleusercontent.com/proxy/p0uNfB1-JwEd_zQfXuiMQmhxkAszQSH19V-ff6kH9_5LS4eWHsZdFQnshtP3tSLDhBuRNb2AV0RD9UGbci0bEeNeHs4Acr5RABX5TJlrQXykGCgt8wUnEgFkGLlIPm-H4Tg7oHiwfH0MnJzdrg" class="curtain-piece-right"  id="curtain-right"/>
      </div>
      <div class="content">
        <nav class="navbar navbar-expand-md navbar-dark bg-purple fixed-top">
          <a class="navbar-brand" href="#">a</a>
          <button
            class="navbar-toggler"
            type="button"
            data-toggle="collapse"
            data-target="#navbarsExampleDefault"
            aria-controls="navbarsExampleDefault"
            aria-expanded="false"
            aria-label="Toggle navigation"
          >
            <span class="navbar-toggler-icon"></span>
          </button>

          <div class="collapse navbar-collapse" id="navbarsExampleDefault">
            <ul class="navbar-nav mr-auto">
              <li class="nav-item">
                <a class="nav-link" href="#"
                  >Home <span class="sr-only">(current)</span></a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#">b</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#">c</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#">d</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#">e</a>
              </li>
            </ul>
          </div>
        </nav>

        <main role="main" class="container">
          <div class="starter-template">
            <h1>Template</h1>
            <p class="lead">
              Use this document as a template for other pages.<br />
              Keep in mind, Bootstrap documentation might be needed to build
              components of the other pages.
            </p>
          </div>
        </main>
      </div>
    </div>


<script
              src="https://code.jquery.com/jquery-3.4.1.min.js"
              integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
              crossorigin="anonymous"></script>



    <script>

      $(function(){
        $(".curtain-panel.left").addClass("transition-left");
        $(".curtain-panel.right").addClass("transition-right");
      })
    </script>
</body>
</html>

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.