javascript 非表示 jQueryを使ってdivを画面外にスライドさせる




可視範囲 アニメーション (4)

これは少し難題です。 ここで私が探しているもの:

  1. 画面上の3つのdiv
  2. Div 1はページ中央(中央)にあり、
  3. Div 2は画面の左端にあります
  4. Div 3は右端の画面から離れています
  5. OnClick 、Div 1はDiv 2の位置にスライドしOnClick (左側)。Div 2は画面全体をスライドし、Div 3はDiv 3の位置にスライドします(中央、中央)。 新しい部署が右に到着します。

私はjQueryアニメーションとAddClassを使ってみました。 jQueryはdivを画面外にスライドさせるのが好きではありません。

何かご意見は?

私が何を記述しているかの例については、 Groupon.comご覧Groupon.com 。 私はそれがクールなアイデアだと思って、それを再現するという挑戦を与えました。 今のところ、サイコロはありません。

-D


そして...一年遅すぎることもありません。 あなたが最初のdivで開始したい場合、あなたのCSSはこのように見える必要があります。

    #box1 { background-color:#333; }
    #box2 { background-color:#333; left: -50%; }
    #box3 { background-color:#333; left: 150%; }
    #box4 { background-color:#333; left: 150%; }
    #box5 { background-color:#333; left: 150%; }


このようなもの?

http://jsfiddle.net/jtbowden/ykbgT/embedded/result/

http://jsfiddle.net/jtbowden/ykbgT/

これが基本機能です。 それはより多くのdivs、等に拡大しないが、それはあなたを始めなければならない。

キーは、要素をコンテナにラップし、オーバーフローを隠すことです。

更新

任意の数のdiv(1より大きい)を扱う若干優れたバージョンがあります:

http://jsfiddle.net/jtbowden/ykbgT/1/

さらに簡素化

http://jsfiddle.net/jtbowden/ykbgT/2/

コードスニペット

$('.box').click(function() {

    $(this).animate({
        left: '-50%'
    }, 500, function() {
        $(this).css('left', '150%');
        $(this).appendTo('#container');
    });

    $(this).next().animate({
        left: '50%'
    }, 500);
});
body {
    padding: 0px;    
}

#container {
    position: absolute;
    margin: 0px;
    padding: 0px;
    width: 100%;
    height: 100%;
    overflow: hidden;  
}

.box {
    position: absolute;
    width: 50%;
    height: 300px;
    line-height: 300px;
    font-size: 50px;
    text-align: center;
    border: 2px solid black;
    left: 150%;
    top: 100px;
    margin-left: -25%;
}

#box1 {
    background-color: green;
    left: 50%;
}

#box2 {
    background-color: yellow;
}

#box3 {
    background-color: red;
}

#box4 {
    background-color: orange;
}

#box5 {
    background-color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
    
    <div id="box1" class="box">Div #1</div>
    <div id="box2" class="box">Div #2</div>
    <div id="box3" class="box">Div #3</div>
    <div id="box4" class="box">Div #4</div>
    <div id="box5" class="box">Div #5</div>
    
</div>


たぶん私は誤解したかもしれない。 私はあなたが連続して3つのdivを必要としていたが、最後のものだけが滑っていて、それ以外のものは欲しかった。

http://jsfiddle.net/acsfy/

(私はこれについてjQueryを使っていることは知っていますが、強制的に動作させようとしているときに私を怒らせました。あなたの目的に合わせる必要があります。


Jeff Bの答えを拡張すると、私はHammer.jsを含めて循環リストを作成しました。

$(function() {
$("#esq").click(function() {
    console.log("Esquerda !");
    var obj = $(".ativo");
    $(obj).animate({
        left: '-50%'
    }, 500, function() {
        $(this).css('left', '+150%');
        $(this).appendTo('#container');
    });
    $(obj).next().animate({
        left: '+50%'
    }, 500, function() {
        $(this).addClass('ativo');
        $(obj).removeClass('ativo');
    });
});

$("#dir").click(function() {
    console.log("Direita !");
    var obj = $(".ativo");
    var prox = $(obj).siblings(":last");
    $(obj).animate({
        left: '+150%'
    }, 500, function() {
        $(prox).prependTo('#container');
    });
    $(prox).css('left', '-50%');
    $(prox).animate({
        left: '+50%'
    }, 500, function() {
        $(this).addClass('ativo');
        $(obj).removeClass('ativo');
    });
});

var hammertime = new Hammer(document.getElementById("container"));
hammertime.get('swipe').set({direction: Hammer.DIRECTION_HORIZONTAL});
hammertime.on('swipeleft', function() {
    $("#esq").trigger("click");
});
hammertime.on('swiperight', function() {
    $("#dir").trigger("click");
});

});

例: http://jsfiddle.net/tvLt1r9h/2/ : http://jsfiddle.net/tvLt1r9h/2/







css