programing

jQuery를 사용하여 화면 밖으로 div 슬라이드

firstcheck 2021. 1. 18. 08:09
반응형

jQuery를 사용하여 화면 밖으로 div 슬라이드


이것은 약간의 도전입니다. 내가 찾는 것은 다음과 같습니다.

  1. 화면에 3div
  2. Div 1은 페이지 중앙 (가운데)에 있습니다.
  3. Div 2는 맨 왼쪽의 화면 바로 밖에 있습니다.
  4. Div 3은 맨 오른쪽 화면 바로 옆에 있습니다.
  5. OnClick, Div 1은 Div 2가 있던 위치 (왼쪽)로, Div 2는 화면에서 완전히 빠져 나가고, Div 3은 Div 3이 있던 위치 (가운데, 가운데)로 미끄러집니다. 새 div가 오른쪽에 도착합니다.

jQuery 애니메이션과 AddClass를 사용해 보았습니다. jQuery는 div를 화면 밖으로 밀어내는 것을 좋아하지 않습니다.

이견있는 사람?

내가 설명하는 내용의 예를 보려면 Groupon.com을 방문하십시오 . 나는 그것이 멋진 아이디어라고 생각하고 그것을 재현하는 도전을 스스로에게주었습니다. 지금까지는 주사위가 없습니다.

-디


이 같은?

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

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

이것이 기본 기능입니다. 더 많은 div 등으로 확장되지는 않지만 시작해야합니다.

핵심은 컨테이너에 요소를 래핑하고 오버플로를 숨기는 것입니다.

업데이트 :

다음은 모든 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>


내가 잘못 해석했을 수도 있습니다. 나는 당신이 연속으로 세 개의 div를 원했고, 끝 부분에만 슬라이딩하고 그 밖의 것을 원했습니다.

http://jsfiddle.net/acsfy/

(나는 당신이 이것을 위해 jQuery를 사용하고 있다는 것을 알고 있지만, 강제로 작동 시키려고 노력하면서 나를 화나게했다. 당신은 이것을 당신의 목적에 맞게 조정해야 할 것이다.)


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/


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%; }

ReferenceURL : https://stackoverflow.com/questions/4741880/slide-a-div-offscreen-using-jquery

반응형