2017-02-14 4 views
0

오버플로가 숨겨진 래퍼 안에 절대적으로 배치 된 여러 개의 스크린이 있습니다.jQuery 토글 클래스에서 CSS 전환이 작동하지 않습니다.

각 화면 내의 링크를 클릭하면 jQuery가 대상의 위치 지정 클래스를 제거하고 한 화면에서 다른 화면으로 화면 사이에 부드러운 슬라이드 전환을 만들고 싶습니다. 전류가 화면에서 나오고 다음 화면이 오른쪽 또는 상단에서 슬라이딩하여 뷰포트로 들어갑니다 (다음 화면에 따라 다름).

하지만 CSS 전환이 작동하지 않습니다. 부드러운 화면 전환 대신 한 화면에서 다른 화면으로 점프합니다.

여기에 무슨 문제가 있습니까?

여기에 JS fiddle이 있습니다.

그리고 코드

: 당신의 도움에 대한

function slideScreens(a,t, e) { 
 
\t if(t == 'screen--5'){ 
 
\t a.addClass('bottom'); 
 
\t $(".is-visible").removeClass("is-visible"); 
 
\t $("."+t).addClass("is-visible").removeClass("top"); 
 
\t } else { 
 
\t a.addClass('left'); 
 
\t $(".is-visible").removeClass("is-visible"); 
 
\t $("."+t).addClass("is-visible").removeClass("right"); 
 
\t } 
 
}; 
 

 
$(function() { 
 
\t $('.screen a').on('click', function(e) { 
 
\t e.preventDefault(); 
 
\t var target = $(this).attr('href'); 
 
\t \t slideScreens($(this),target, e); 
 
\t }); 
 
});
.wrapper__banner { 
 
    width: 100%; 
 
    height: 400px; 
 
    overflow: hidden; 
 
    border: 2px solid black; } 
 

 
.screens { 
 
    position: relative; 
 
    left: 0; 
 
    top: 0; 
 
    width: 100%; 
 
    height: 100%; } 
 

 
.screen { 
 
    position: absolute; 
 
    width: 100%; 
 
    height: 100%; } 
 

 
.screen--1 { 
 
    background: red; } 
 

 
.screen--2 { 
 
    background: lightblue; } 
 

 
.screen--3 { 
 
    background: green; } 
 

 
.screen--4 { 
 
    background: pink; } 
 

 
.screen--5 { 
 
    background: grey; } 
 

 
.screen { 
 
    padding: 10px; 
 
    -webkit-transition: all 0.5s ease; 
 
    -moz-transition: all 0.5s ease; 
 
    -o-transition: all 0.5s ease; 
 
    transition: all 0.5s ease; } 
 
    .screen.right { 
 
    left: 100%; } 
 
    .screen.left { 
 
    right: 100%; } 
 
    .screen.top { 
 
    bottom: 100%; } 
 
    .screen.bottom { 
 
    top: 100%; }
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 
 
<section class='wrapper__banner'> 
 
\t <div class='screens'> 
 
\t \t <div class='screen screen--1 is-visible'> 
 
\t \t \t screen--1 
 
\t \t \t <a href="screen--2">to screen 2</a> 
 
\t \t </div> 
 
\t \t <div class='screen screen--2 right'> 
 
\t \t \t screen--2 
 
\t \t \t \t <a href="screen--3">to screen 3</a> 
 
\t \t \t \t <a href="screen--5">show screen 5</a> 
 
\t \t </div> 
 
\t \t <div class='screen screen--3 right'> 
 
\t \t \t screen--3 
 
\t \t \t \t <a href="screen--4">to screen 4</a> 
 
\t \t </div> 
 
\t \t <div class='screen screen--4 right'> 
 
\t \t \t screen--4 
 
\t \t </div> 
 
\t \t <div class='screen screen--5 top'> 
 
\t \t \t screen--5 
 
\t \t </div> 
 
\t </div> 
 
</section>

감사합니다.

답변

0

I'v 0으로 .screen 불투명도를 설정하고 다음과 같이 스타일 시트에 .is-visible 클래스를 추가 :

.is-visible { 
    opacity: 1; 
} 

function slideScreens(a,t, e) { 
 
\t if(t == 'screen--5'){ 
 
\t a.addClass('bottom'); 
 
\t $(".is-visible").removeClass("is-visible"); 
 
\t $("."+t).addClass("is-visible").removeClass("top"); 
 
\t } else { 
 
\t a.addClass('left'); 
 
\t $(".is-visible").removeClass("is-visible"); 
 
\t $("."+t).addClass("is-visible").removeClass("right"); 
 
\t } 
 
}; 
 

 
$(function() { 
 
\t $('.screen a').on('click', function(e) { 
 
\t e.preventDefault(); 
 
\t var target = $(this).attr('href'); 
 
\t \t slideScreens($(this),target, e); 
 
\t }); 
 
});
.wrapper__banner { 
 
    width: 100%; 
 
    height: 400px; 
 
    overflow: hidden; 
 
    border: 2px solid black; } 
 

 
.screens { 
 
    position: relative; 
 
    left: 0; 
 
    top: 0; 
 
    width: 100%; 
 
    height: 100%; } 
 

 
.screen { 
 
    opacity: 0; 
 
    position: absolute; 
 
    width: 100%; 
 
    height: 100%; } 
 

 
.screen--1 { 
 
    background: red; } 
 

 
.screen--2 { 
 
    background: lightblue; } 
 

 
.screen--3 { 
 
    background: green; } 
 

 
.screen--4 { 
 
    background: pink; } 
 

 
.screen--5 { 
 
    background: grey; } 
 

 
.screen { 
 
    padding: 10px; 
 
    -webkit-transition: all 0.5s ease; 
 
    -moz-transition: all 0.5s ease; 
 
    -o-transition: all 0.5s ease; 
 
    transition: all 0.5s ease; } 
 
    .screen.right { 
 
    left: 100%; } 
 
    .screen.left { 
 
    right: 100%; } 
 
    .screen.top { 
 
    bottom: 100%; } 
 
    .screen.bottom { 
 
    top: 100%; } 
 

 
.is-visible { 
 
    opacity: 1; 
 
}
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 
 
<section class='wrapper__banner'> 
 
\t \t \t <div class='screens'> 
 
\t \t \t \t <div class='screen screen--1 is-visible'> 
 
\t \t \t \t \t screen--1 
 
\t \t \t \t \t <a href="screen--2">to screen 2</a> 
 
\t \t \t \t </div> 
 
\t \t \t \t <div class='screen screen--2 right'> 
 
\t \t \t \t \t screen--2 
 
\t \t \t \t \t \t <a href="screen--3">to screen 3</a> 
 
\t \t \t \t \t \t <a href="screen--5">show screen 5</a> 
 
\t \t \t \t </div> 
 
\t \t \t \t <div class='screen screen--3 right'> 
 
\t \t \t \t \t screen--3 
 
\t \t \t \t \t \t <a href="screen--4">to screen 4</a> 
 
\t \t \t \t </div> 
 
\t \t \t \t <div class='screen screen--4 right'> 
 
\t \t \t \t \t screen--4 
 
\t \t \t \t </div> 
 
\t \t \t \t <div class='screen screen--5 top'> 
 
\t \t \t \t \t screen--5 
 
\t \t \t \t </div> 
 
\t \t \t </div> 
 
</section>

+0

윙윙 거리는 소리가 들릴 때 불투명도를 적용하려면 여기로 이동하십시오. ggled. 이벤트가 원하는 효과가 아니라면, 내가 원하는 애니메이션의 기본 값을 설정해야한다는 understant입니다. 예를 들어 주셔서 감사합니다. –

0

문제는 당신이 가진간에 전환하려고하는 것입니다/왼쪽/오른쪽/위/아래 CSS 속성이 없습니다. 전환 효과를 얻으려면 시작부터 사용할 수있는 선언되고 유효한 속성이 필요하며 해당 속성을 전환 할 값을 알아야합니다. left/right/top/bottom 값을 정의하지 않으면 기본값은 "auto"입니다. CSS는 "자동"과 숫자 값 사이를 전환 할 수 없습니다.

여기서는 왼쪽/오른쪽/위/아래를 요소에 intially 사용하여 위치를 올바르게 배치 한 다음 해당 값을 전환 할 수 있습니다. 또는 CSS 변환을 사용할 수 있습니다. https://developer.mozilla.org/en-US/docs/Web/CSS/transform (변환 : translate3d 여기에 당신의 최선의 방법이 될 woudl)

편집 : http://codepen.io/adrianroworth/pen/KaJrzj

<div class="container"> 
    <div class="screens"> 
     <div class="screens__screen screens__screen--1 screens__screen--visible" id="screen1"> 
      <div class="screens__screen-nav"> 
       <a href="#screen2" class="screens__screen-nav-link">To screen 2</a> 
      </div> 
      screen 1 
     </div> 
     <div class="screens__screen screens__screen--2" id="screen2"> 
      <div class="screens__screen-nav"> 
       <a href="#screen3" class="screens__screen-nav-link">To screen 3</a> 
       <a href="#screen5" class="screens__screen-nav-link">To screen 5</a> 
      </div> 
      screen 2 
     </div> 
     <div class="screens__screen screens__screen--3" id="screen3"> 
      <div class="screens__screen-nav"> 
       <a href="#screen4" class="screens__screen-nav-link">Screen 4</a> 
      </div> 
      screen 3 
     </div> 
     <div class="screens__screen screens__screen--4" id="screen4"> 
      screen 4 
     </div> 
     <div class="screens__screen screens__screen--5" id="screen5"> 
      screen 5 
     </div> 
    </div> 
</div> 

-

.container { 
    height: 400px; 
    display: block; 
    width: 400px; 
    position: relative; 
    z-index: 1; 
} 
.screens { 
    position: absolute; 
    z-index: 2; // just to keep it easy to understand in my head. 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
    overflow: hidden; 
} 
.screens__screen { 
    position: absolute; 
    z-index: 3; // just to keep it easy to understand in my head. 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
    transition: top 0.3s ease-in-out, left 0.3s ease-in-out; 
} 
.screens__screen-nav { 
    background: rgba(0, 0, 0, 0.5); 
    padding: 5px; 
} 
.screens__screen-nav-link { 
    color: #ffffff; 
} 
.screens__screen--1 { 
    z-index: 100; 
    background: green; 
} 
.screens__screen--2 { 
    z-index: 90; 
    background: red; 
    left: 100%; 
} 
.screens__screen--3 { 
    z-index: 80; 
    background: blue; 
    left: 100%; 
} 
.screens__screen--4 { 
    z-index: 70; 
    background: yellow; 
    left: 100%; 
} 
.screens__screen--5 { 
    z-index: 60; 
    background: purple; 
    top: -100%; 
} 
.screens__screen--visible { 
    top: 0%; 
    left: 0%; 
    z-index: 200; 
} 
.screens__screen--done { 
    top: 0%; 
    left: 0%; 
    z-index: 200; 
} 

-

: 여기 당신이 원하는 것을의 작업 codepen 예입니다
$(function() { 

    var $screens = $('.screens__screen'); 

    $('.screens__screen-nav-link').on('click', function screenNavLinkClickAF(e) { 
     e.preventDefault(); 
     var $this = $(this); 
     var screenId = $this.attr('href'); 
     $screens.not($(screenId)).removeClass('screens__screen--visible'); 
     $(screenId).addClass('screens__screen--visible screens__screen--done'); 
    }); 
}); 
+0

힌트를 보내 주셔서 감사합니다. 기본값을 추가하여 시도해 보겠습니다. \t 왼쪽 : 0; \t 하단 : 0; on .screen 그리고 결과를 확인하십시오.지금 부분적으로 작동 OK –

+0

감사합니다 .. https://jsfiddle.net/fredconv/posxoqmt/2/ 가 화면을 제외한 모든 화면 작동 - 5. (이것은 상단에서 올 수 있지만 여전히 점프합니다.) 또한 대상 슬라이드 인은 (왼쪽에서) 작동하지만 현재 div의 슬라이드 아웃에서는 작동하지 않습니다. 클래스가 ('왼쪽') .. 추가되지 않기 때문에 아직도 이유를 찾고 : 어쨌든 D 감사 –

+0

내가 현재 DIV에 CLASSE를 추가하는 방법을 발견 https://jsfiddle.net/fredconv/posxoqmt/3/ 나는 .closest ('.screen')를 추가했다. .. 그러나 아직도 화면에서는 작동하지 않는다. 혹시라도 생각하면 .. 감사합니다 –

관련 문제