2017-02-14 77 views
0

我有絕對定位在一個隱藏溢出的包裝內的多個屏幕。CSS轉換不工作在jQuery切換類

當我點擊每個屏幕裏面的鏈接,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

心中已經設置.screen不透明度爲0,並添加.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。 事件,如果它不是渴望效果,我明白,我需要設置我想要動畫的默認值。 謝謝你的例子。 –

0

的問題是,你想有之間進行轉換/沒有左/右/上/下CSS屬性。爲了轉換到工作狀態,它需要一個聲明和有效的屬性,它可以從一開始就處理,並且還需要知道將該屬性轉換爲什麼值。如果您未定義左/右/上/下值,則默認爲「自動」。 CSS不能在「auto」和數值之間轉換。

我在這裏推薦的是intially使用上的元素左/右/上/下,讓他們正確定位,那麼你就可以轉換這些值。或者,也可以使用CSS轉換。 https://developer.mozilla.org/en-US/docs/Web/CSS/transform(變換:translate3d woudl在這裏你最好的選擇)

編輯:這是你想要什麼工作codepen例如: 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; 
} 

-

$(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 left:0; \t bottom:0; on .screen 然後看看結果如何。 謝謝 –

+0

確定它現在部分工作.. https://jsfiddle.net/fredconv/posxoqmt/2/ 它適用於所有的屏幕除了屏幕-5。 (這個應該來自頂部,但它仍然跳躍..) 另外..目標幻燈片工作(從左邊),但不是當前div的滑出。因爲類('左')不添加..仍然尋找爲什麼:D 無論如何謝謝 –

+0

我發現如何添加classe到當前div: https://jsfiddle.net/fredconv/posxoqmt/3/ 我在var後添加了一個.closest('。screen').. 但它仍然不能用於屏幕 - 5 ..仍然在尋找。如果你有任何想法..謝謝 –