2017-02-02 23 views
0

予想される動作:遷移のため次のボタンがヒットすると、各div.slideは左にスライドします。left 1000ルール。CSS3遷移が残っていない

実際の動作:全く遷移しません。

フィドル:https://jsfiddle.net/k26rhs67/

HTML:

<div id="clientContainer"> 
    <div id="container"> 
    <div id="body"> 
     <div class="slide"> 
     <span class="slide_num">1</span> 
     <button class="next">Next</button> 
     </div> 
     <div class="slide"> 
     <span class="slide_num">2</span> 
     <button class="next">Next</button> 
     </div> 
     <div class="slide"> 
     <span class="slide_num">3</span> 
     <button class="next">Next</button> 
     </div> 
     <div class="slide"> 
     <span class="slide_num">4</span> 
     <button class="next">Next</button> 
     </div> 
     <div class="slide"> 
     <span class="slide_num">5</span> 
     <button class="next">Next</button> 
     </div> 
     <div class="slide"> 
     <span class="slide_num">6</span> 
     <button class="next">Next</button> 
     </div> 
     <div class="slide"> 
     <span class="slide_num">7</span> 
     <button class="next">Next</button> 
     </div> 
    </div> 
    </div> 
</div> 

はCSS:

#body { 
    width: 100%; 
    box-sizing: border-box; 
    padding: 4px; 
    display: table; 
    table-layout: fixed; 
    min-height: 250px; 
    overflow: hidden; 
} 

#clientContainer { 
    width: 300px; 
    display: table-cell; 
} 

#container { 
    position: relative; 
    width: 100%; 
    max-width: 520px; 
    font-family: sans-serif; 
    font-size: 13px; 
    color: #333; 
    font-weight: normal; 
} 

.slide { 
    padding: 12px; 
    height: 200px; 

    position: relative; 
    float: left; 
     display: block; 
    top: 0; 
    width: 100%; 
    padding: 16px; 
    background: #fff; 
    box-shadow: 0 0 4px #aaa; 
    box-sizing: border-box; 
    min-height: 250px; 
    visibility: hidden; 
    display: none; 
    margin-left: -116%; 
    left: 348%; 
    transition: left 1000ms; 
} 

.slide:nth-child(1) { 
    left: -116%; 
} 

.slide:nth-child(2) { 
    left: 0%; 
    visibility: visible; 
} 

.slide:nth-child(3) { 
    left: 116%; 
    display: block; 
    visibility: visible; 
} 

.slide:nth-child(4) { 
    left: 116%; 
    visibility: visible; 
} 

.slide_num { 
    display: block; 
    width: 30px; 
    margin: 0 auto 0 auto; 
} 

.next { 
    display:block; 
    margin: 0 auto 0 auto; 
    width: 60px; 
} 

JS:

function promiseTransitionEnd($element) { 
    var deferred = $.Deferred(); 
    var duration = parseFloat($element.css("transitionDuration")) || 0; 
    if (duration == 0) { 
    deferred.resolve(); 
    } else { 
    $element.on("transitionend.promiseTransitionEnd", function (e) { 
     if (e.target == this) { 
     $(this).off("transitionend.promiseTransitionEnd"); 
     deferred.resolve($element); 
     } 
    }); 
    } 
    return deferred; 
} 

var $container = $("#container"); 
var $body = $container.find("#body"); 

var carousel = { 
    $container: $body, 
    current: function() { 
    return $body.find(".slide").eq(2); 
    }, 
    next: function() { 
    var $slides = $body.find(".slide"); 
    $slides.first().insertAfter($slides.last()); 
    return promiseTransitionEnd($slides.eq(2)) 
     .then(function() { 
     return carousel.current(); 
     }); 
    } 
}; 

$(".next").click(function() { 
    carousel.next(); 
}); 

答えて

0

私はコメントとしてこれを追加するだろうが、私は持っているように< 50フィードバック私はできません:(

あなたは基本的にDOMから項目を切り離して、新しい要素としてそれを再挿入するので、移行は行われないと思います。

+0

に役立つかもしれません。私は最初の.slide divを削除し、最後に移動します。私は3番目と4番目の.slide divsが目に見える遷移を持つことを期待しています。 – thatidiotguy

+0

申し訳ありませんが実際に間違っていた、私はあなたのコードを正しく読んでいなかった。私はいくつかのCSSを編集しましたが、3番目と4番目の要素はコード内に同じ左プロパティを持っていました。ブロック/隠されているようです:https://jsfiddle.net/k26rhs67/2/ – Booboobeaker

+0

遷移は今でも間違った側から起きている。 4番目のスライドの残りの値以外に何を変更しましたか?私はちょうど私のフィドルでそれを変更し、私は行動の変化に気付かない。 – thatidiotguy

0

これは私が理解していないあなた

$(function() { 
 
    $('.slide .next').on('click', function(e) { 
 
    e.preventDefault(); 
 
    $('.slide.activeSlide').removeClass('activeSlide'); 
 

 
    $(this).parent().next().length ? $(this).parent().next().addClass('activeSlide') : $(this).parent().siblings(":eq(0)").addClass('activeSlide'); 
 

 
    }); 
 
})
#body { 
 
    width: 100%; 
 
    box-sizing: border-box; 
 
    padding: 4px; 
 
    display: table; 
 
    table-layout: fixed; 
 
    min-height: 250px; 
 
    overflow: hidden; 
 
} 
 
#clientContainer { 
 
    width: 300px; 
 
    display: table-cell; 
 
} 
 
#container { 
 
    position: relative; 
 
    width: 100%; 
 
    max-width: 520px; 
 
    font-family: sans-serif; 
 
    font-size: 13px; 
 
    color: #333; 
 
    font-weight: normal; 
 
} 
 
.slide { 
 
    padding: 12px; 
 
    height: 200px; 
 
    display: none; 
 
    position: relative; 
 
    float: left; 
 
    display: none; 
 
    top: 0; 
 
    width: 100%; 
 
    padding: 16px; 
 
    background: #fff; 
 
    box-shadow: 0 0 4px #aaa; 
 
    box-sizing: border-box; 
 
    min-height: 250px; 
 
} 
 
@keyframes slideLeft { 
 
    0% { 
 
    transform: translateX(150%); 
 
    } 
 
    50% { 
 
    transform: translateX(-8%); 
 
    } 
 
    65% { 
 
    transform: translateX(4%); 
 
    } 
 
    80% { 
 
    transform: translateX(-4%); 
 
    } 
 
    95% { 
 
    transform: translateX(2%); 
 
    } 
 
    100% { 
 
    transform: translateX(0%); 
 
    } 
 
} 
 
@-webkit-keyframes slideLeft { 
 
    0% { 
 
    -webkit-transform: translateX(150%); 
 
    } 
 
    50% { 
 
    -webkit-transform: translateX(-8%); 
 
    } 
 
    65% { 
 
    -webkit-transform: translateX(4%); 
 
    } 
 
    80% { 
 
    -webkit-transform: translateX(-4%); 
 
    } 
 
    95% { 
 
    -webkit-transform: translateX(2%); 
 
    } 
 
    100% { 
 
    -webkit-transform: translateX(0%); 
 
    } 
 
} 
 
.slide_num { 
 
    display: block; 
 
    width: 30px; 
 
    margin: 0 auto 0 auto; 
 
} 
 
.next { 
 
    display: block; 
 
    margin: 0 auto 0 auto; 
 
    width: 60px; 
 
} 
 
.activeSlide { 
 
    animation-name: slideLeft; 
 
    -webkit-animation-name: slideLeft; 
 
    animation-duration: 1s; 
 
    -webkit-animation-duration: 1s; 
 
    animation-timing-function: ease-in-out; 
 
    -webkit-animation-timing-function: ease-in-out; 
 
    display: block !important; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="clientContainer"> 
 
    <div id="container"> 
 
    <div id="body"> 
 
     <div class="slide activeSlide"> 
 
     <span class="slide_num">1</span> 
 
     <button class="next">Next</button> 
 
     </div> 
 
     <div class="slide"> 
 
     <span class="slide_num">2</span> 
 
     <button class="next">Next</button> 
 
     </div> 
 
     <div class="slide"> 
 
     <span class="slide_num">3</span> 
 
     <button class="next">Next</button> 
 
     </div> 
 
     <div class="slide"> 
 
     <span class="slide_num">4</span> 
 
     <button class="next">Next</button> 
 
     </div> 
 
     <div class="slide"> 
 
     <span class="slide_num">5</span> 
 
     <button class="next">Next</button> 
 
     </div> 
 
     <div class="slide"> 
 
     <span class="slide_num">6</span> 
 
     <button class="next">Next</button> 
 
     </div> 
 
     <div class="slide"> 
 
     <span class="slide_num">7</span> 
 
     <button class="next">Next</button> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

+0

私の関心事はコードを働かせるのではなく、私がなぜそうしたのか理解することです。アニメーションではなくトランジションを使用したいと思います。ありがとう、結構です。 – thatidiotguy

+0

@thatidiotguy:トランジションleftは、要素dom left propertyを変更したときに動作します。コードでは、指定された場所にエレメントを再挿入しているので、トランジションの約束を引き起こしていません。 –

+0

私は第1陣の発動は期待していませんが、第3隊と第4隊の発射については期待していません。 – thatidiotguy

関連する問題