Slide a div offscreen using jQuery

后端 未结 4 504
感动是毒
感动是毒 2020-12-07 09:55

This is a bit of a challenge. Here\'s what I\'m looking for:

  1. 3 divs on screen
  2. Div 1 resides in the middle of the page (centered)
  3. Div 2 reside
相关标签:
4条回答
  • 2020-12-07 10:22

    And... not a year too late. If you want it to start on the first div, your css needs to look like this.

    
        #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%; }
    
    
    0 讨论(0)
  • 2020-12-07 10:24

    Something like this?

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

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

    This is the basic functionality. It doesn't scale to more divs, etc, but that should get you started.

    The key is to wrap your elements in a container and make the overflow hidden.

    Update:

    Here's a slightly better version that handles any number of divs (greater than 1):

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

    Simplified further:

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

    Code snippet:

    $('.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>

    0 讨论(0)
  • 2020-12-07 10:27

    Maybe I misinterpreted. I though you wanted three divs in a row, and only the ones on the end sliding and whatnot.

    http://jsfiddle.net/acsfy/

    (I know you're using jQuery for this, but it pissed me off as I was trying to force it to work. You'd have to adapt this for your purposes.)

    0 讨论(0)
  • 2020-12-07 10:27

    Extending Jeff B answer, i've included Hammer.js and made a circular list.

    $(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");
    });
    

    });

    Example in: http://jsfiddle.net/tvLt1r9h/2/

    0 讨论(0)
提交回复
热议问题