테스트 사이트 - 개발 중인 베타 버전입니다

스크롤에 반응해서 움직이게 하는 애니매이션 관련

장초 7년 전 조회 3,594

http://geminio.co.kr

 

홈페이지를 들어가보시면 아래로 움직이게 하는 애니매이션까지는 구현이 되었으나 다시 스크롤을 올려도

되돌아가지않아 스크롤을 올렸을때 캐릭터가 되돌아가는걸 구현중에 생긴 문제입니다.

 

    $(document).ready(function(){</p>

<p>        var s_top_1 = $(".main_street_visual").offset().top-210; //스크롤 위치 1 

        var s_top_2 = $(".main_street_visual").offset().top+455;

        var s_top_3 = $(".main_street_visual").offset().top+1131;

        var s_top_4 = $(".main_street_visual").offset().top+2138;

        var s_top_5 = $(".main_street_visual").offset().top+2612;</p>

<p>        var _target = $("p.visual_contents.queen") //인형 

        var chk = 0; // 스크롤 모션 상태 값</p>

<p>        $(window).scroll(function(){

            var scroll_H = $(document).scrollTop(); //현재 스크롤 탑

            //console.log(scroll_H); //현재 스크롤탑 값 콘솔확인 가능</p>

<p>            if(scroll_H >= s_top_1){</p>

<p>                if (chk==0){

                

                    TweenMax.to(_target, 0.1, {top:"-210px", left:"374px", onComplete:allComplete});

                    TweenMax.to(_target, 0.5, {top:"80px", delay:0.1});

                    TweenMax.to(_target, 0.5, {left:"-120px", delay:0.6});

                    TweenMax.to(_target, 0.5, {top:"455px", delay:1.1});

                    function allComplete(){

                        console.log('1단계');

                        chk=1;    

                    }

                }

            } </p>

<p>            if(scroll_H >= s_top_2){</p>

<p>                if (chk==1){

                    TweenMax.to(_target, 0.1, {top:"455px", left:"-120px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {top:"595px", delay:0.1});

                    TweenMax.to(_target,0.5, {left:"570px", delay:0.6});

                    TweenMax.to(_target,0.5, {top:"795px", delay:1.1});

                    TweenMax.to(_target,0.5, {left:"820px", delay:1.6});

                    TweenMax.to(_target,0.5, {top:"1131px", delay:2.1});

                    function allComplete(){

                        console.log('2단계');

                        chk=2;  

                    }  

                }

            }</p>

<p>            if(scroll_H >= s_top_3){</p>

<p>                if (chk==2){

                    TweenMax.to(_target, 0.1, {top:"1131px", left:"820px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {top:"1301px", delay:0.1});

                    TweenMax.to(_target,0.5, {left:"745px", delay:0.6});

                    TweenMax.to(_target,0.5, {top:"1568px", delay:1.1});

                    TweenMax.to(_target,0.5, {left:"23px", delay:1.6});

                    TweenMax.to(_target,0.5, {top:"2138px", delay:2.1});

                    function allComplete(){

                        console.log('3단계');

                        chk=3;  

                    }  

                }

            }</p>

<p>            if(scroll_H >= s_top_4){</p>

<p>                if (chk==3){

                    TweenMax.to(_target, 0.1, {top:"2138px", left:"23px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {top:"2405px", delay:0.1});

                    TweenMax.to(_target,0.5, {left:"565px", delay:0.6});

                    TweenMax.to(_target,0.5, {top:"2612px", delay:1.1});

                    TweenMax.to(_target,0.5, {left:"705px", delay:1.6});

                    function allComplete(){

                        console.log('4단계');

                        chk=4;  

                    }  

                }

            }</p>

<p>            if(scroll_H >= s_top_5){</p>

<p>                if (chk==4){

                    TweenMax.to(_target, 0.1, {top:"2612px", left:"705px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {left:"1095px", delay:0.1});

                    TweenMax.to(_target,1.0, {top:"3625px", delay:0.6});

                    TweenMax.to(_target,0.5, {left:"765px", delay:1.6});

                    TweenMax.to(_target,0.5, {top:"3675px", delay:2.1});

                    TweenMax.to(_target,0.5, {left:"50px", delay:2.6});

                    function allComplete(){

                        console.log('5단계');

                        chk=5;  

                    }  

                }

            }</p>

<p>        });

    });</p>

<p>

 

http://geminio.co.kr/index_move.html

 

해당페이지처럼 원래의 위치좌표를 대서 다시 올라가게끔 하려고 하는데 스크롤이 조금만 올라갔다 내려도 바로 캐릭터가 움직여서 아래로 내려도 올라가고 위로 내려도 아래로 내려오는 문제점에 봉착했는데 어떻게 진행해야될지 감이 안오네요;;

 

아래의 소스는 제가 위의 소스를 토대로 수정한 스크립트부분입니다.

시간차를 두고 움직이게 하는 js는 트윈맥스라는것을 응용했습니다.

 

특정 위치에만 딱 스크롤이 닿았을때 캐릭터가 움직여서 깔끔하게 올라가고 내려가게 하려면

어떻게 작업을 해야될지 알고싶습니다.

 

</p>

<p>    $(document).ready(function(){</p>

<p>        var s_top_1 = $(".main_street_visual").offset().top-210; //스크롤 위치 1

        var s_top_2 = $(".main_street_visual").offset().top+455;

        var s_top_3 = $(".main_street_visual").offset().top+1131;

        var s_top_4 = $(".main_street_visual").offset().top+2138;

        var s_top_5 = $(".main_street_visual").offset().top+2612;

        var s_top_6 = $(".main_street_visual").offset().top-510; //스크롤 위치:back 1 </p>

<p>        var _target = $("p.visual_contents.queen") //인형 

        var chk = 0; // 스크롤 모션 상태 값</p>

<p>        $(window).scroll(function(){

            var scroll_H = $(document).scrollTop(); //현재 스크롤 탑

            //console.log(scroll_H); //현재 스크롤탑 값 콘솔확인 가능</p>

<p>            if(scroll_H >= s_top_1){</p>

<p>                if (chk==0){

                

                    TweenMax.to(_target, 0.1, {top:"-210px", left:"374px", onComplete:allStop});

                    TweenMax.to(_target, 0.5, {top:"80px", delay:0.1});

                    TweenMax.to(_target, 0.5, {left:"-120px", delay:0.6});

                    TweenMax.to(_target, 0.5, {top:"455px", delay:1.1, onComplete:allComplete});

                    function allStop(){

                        console.log('스탑');

                        chk=100;    

                    }

                    function allComplete(){

                        console.log('1단계');

                        chk=1;    

                    }

                }

            } </p>

<p>            if(scroll_H >= s_top_6){</p>

<p>                if (chk==1){

                

                    TweenMax.to(_target, 0.1, {top:"455px", left:"-120px", onComplete:allStop});

                    TweenMax.to(_target, 0.5, {top:"80px", delay:0.1});

                    TweenMax.to(_target, 0.5, {left:"374px", delay:0.6});

                    TweenMax.to(_target, 0.5, {top:"-120px", delay:1.1, onComplete:allComplete});

                    function allStop(){

                        console.log('스탑');

                        chk=100;    

                    }

                    function allComplete(){

                        console.log('0단계');

                        chk=0;    

                    }

                }

            } </p>

<p>            if(scroll_H >= s_top_2){</p>

<p>                if (chk==1){

                    TweenMax.to(_target, 0.1, {top:"455px", left:"-120px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {top:"595px", delay:0.1});

                    TweenMax.to(_target,0.5, {left:"570px", delay:0.6});

                    TweenMax.to(_target,0.5, {top:"795px", delay:1.1});

                    TweenMax.to(_target,0.5, {left:"820px", delay:1.6});

                    TweenMax.to(_target,0.5, {top:"1131px", delay:2.1});

                    function allComplete(){

                        console.log('2단계');

                        chk=2;  

                    }  

                }

            }</p>

<p>            if(scroll_H >= s_top_3){</p>

<p>                if (chk==2){

                    TweenMax.to(_target, 0.1, {top:"1131px", left:"820px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {top:"1301px", delay:0.1});

                    TweenMax.to(_target,0.5, {left:"745px", delay:0.6});

                    TweenMax.to(_target,0.5, {top:"1568px", delay:1.1});

                    TweenMax.to(_target,0.5, {left:"23px", delay:1.6});

                    TweenMax.to(_target,0.5, {top:"2138px", delay:2.1});

                    function allComplete(){

                        console.log('3단계');

                        chk=3;  

                    }  

                }

            }</p>

<p>            if(scroll_H >= s_top_4){</p>

<p>                if (chk==3){

                    TweenMax.to(_target, 0.1, {top:"2138px", left:"23px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {top:"2405px", delay:0.1});

                    TweenMax.to(_target,0.5, {left:"565px", delay:0.6});

                    TweenMax.to(_target,0.5, {top:"2612px", delay:1.1});

                    TweenMax.to(_target,0.5, {left:"705px", delay:1.6});

                    function allComplete(){

                        console.log('4단계');

                        chk=4;  

                    }  

                }

            }</p>

<p>            if(scroll_H >= s_top_5){</p>

<p>                if (chk==4){

                    TweenMax.to(_target, 0.1, {top:"2612px", left:"705px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {left:"1095px", delay:0.1});

                    TweenMax.to(_target,1.0, {top:"3625px", delay:0.6});

                    TweenMax.to(_target,0.5, {left:"765px", delay:1.6});

                    TweenMax.to(_target,0.5, {top:"3675px", delay:2.1});

                    TweenMax.to(_target,0.5, {left:"50px", delay:2.6});

                    function allComplete(){

                        console.log('5단계');

                        chk=5;  

                    }  

                }

            }</p>

<p>        });

    });</p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

o
7년 전

//부그럽게 하는방법은 스크롤검색구간을 각각 만드시는게 좋으시고요  //이동시 캐릭터의 위치는 화면 중간에 있는것이 좋습니다 

//현재 위아래 이동을 확인할 변수를 만드시고요 var current_scroll=0; //이전방향 $(document).ready(function(){

var scroll_H = $(document).scrollTop(); //현재 스크롤 탑

//console.log(scroll_H); //현재 스크롤탑 값 콘솔확인 가능

//------------------------- //위아래 정의 var mode="up"; if(scroll_H > current_scroll){     mode="down"; } current_scroll=scroll_H; //-------------------------

를 정의합니다 

    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 스크롤 작업 [s] +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    var current_scroll=0;

    $(document).ready(function(){</p>

<p>        var s_top_1 = $(".main_street_visual").offset().top-210; //스크롤 위치 1 

        var s_top_2 = $(".main_street_visual").offset().top+455;

        var s_top_3 = $(".main_street_visual").offset().top+1131;

        var s_top_4 = $(".main_street_visual").offset().top+2138;

        var s_top_5 = $(".main_street_visual").offset().top+2612;</p>

<p>        var _target = $("p.visual_contents.queen") //인형 

        var chk = 0; // 스크롤 모션 상태 값</p>

<p>        

        $(window).scroll(function(){

            var scroll_H = $(document).scrollTop(); //현재 스크롤 탑

            //console.log(scroll_H); //현재 스크롤탑 값 콘솔확인 가능

            

            //-------------------------

            //위아래 정의

            var mode="up";

            if(scroll_H > current_scroll){

                mode="down";

            }

            current_scroll=scroll_H;

            //-------------------------</p>

<p>

        if(mode=="down")

        {

            if(scroll_H >= s_top_1){</p>

<p>                if (chk==0){

                

                    TweenMax.to(_target, 0.1, {top:"-210px", left:"374px", onComplete:allComplete});

                    TweenMax.to(_target, 0.5, {top:"80px", delay:0.1});

                    TweenMax.to(_target, 0.5, {left:"-120px", delay:0.6});

                    TweenMax.to(_target, 0.5, {top:"455px", delay:1.1});

                    function allComplete(){

                        console.log('1단계');

                        chk=1;    

                    }

                }

            } </p>

<p>            if(scroll_H >= s_top_2){</p>

<p>                if (chk==1){

                    TweenMax.to(_target, 0.1, {top:"455px", left:"-120px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {top:"595px", delay:0.1});

                    TweenMax.to(_target,0.5, {left:"570px", delay:0.6});

                    TweenMax.to(_target,0.5, {top:"795px", delay:1.1});

                    TweenMax.to(_target,0.5, {left:"820px", delay:1.6});

                    TweenMax.to(_target,0.5, {top:"1131px", delay:2.1});

                    function allComplete(){

                        console.log('2단계');

                        chk=2;  

                    }  

                }

            }</p>

<p>            if(scroll_H >= s_top_3){</p>

<p>                if (chk==2){

                    TweenMax.to(_target, 0.1, {top:"1131px", left:"820px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {top:"1301px", delay:0.1});

                    TweenMax.to(_target,0.5, {left:"745px", delay:0.6});

                    TweenMax.to(_target,0.5, {top:"1568px", delay:1.1});

                    TweenMax.to(_target,0.5, {left:"23px", delay:1.6});

                    TweenMax.to(_target,0.5, {top:"2138px", delay:2.1});

                    function allComplete(){

                        console.log('3단계');

                        chk=3;  

                    }  

                }

            }</p>

<p>            if(scroll_H >= s_top_4){</p>

<p>                if (chk==3){

                    TweenMax.to(_target, 0.1, {top:"2138px", left:"23px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {top:"2405px", delay:0.1});

                    TweenMax.to(_target,0.5, {left:"565px", delay:0.6});

                    TweenMax.to(_target,0.5, {top:"2612px", delay:1.1});

                    TweenMax.to(_target,0.5, {left:"705px", delay:1.6});

                    function allComplete(){

                        console.log('4단계');

                        chk=4;  

                    }  

                }

            }</p>

<p>            if(scroll_H >= s_top_5){</p>

<p>                if (chk==4){

                    TweenMax.to(_target, 0.1, {top:"2612px", left:"705px", onComplete:allComplete});

                    TweenMax.to(_target,0.5, {left:"1095px", delay:0.1});

                    TweenMax.to(_target,1.0, {top:"3625px", delay:0.6});

                    TweenMax.to(_target,0.5, {left:"765px", delay:1.6});

                    TweenMax.to(_target,0.5, {top:"3675px", delay:2.1});

                    TweenMax.to(_target,0.5, {left:"50px", delay:2.6});

                    function allComplete(){

                        console.log('5단계');

                        chk=5;  

                    }  

                }

            }</p>

<p>        }//다운 완료

        else{

            //업을 정의한다

            if(scroll_H <= s_top_5){</p>

<p>                if (chk==5){

                    //이동

               

                    function allComplete(){

                        console.log('5단계');

                        chk=4;  

                    }  

                }

            }    </p>

<p>            if(scroll_H <= s_top_4){</p>

<p>                if (chk==4){

                  //이동</p>

<p>

                    

                    function allComplete(){

                        console.log('4단계');

                        chk=3;  

                    }  

                }

            }

            </p>

<p>

            if(scroll_H <= s_top_3){</p>

<p>                if (chk==3){

                  //이동

  </p>

<p>                    

                    function allComplete(){

                        console.log('3단계');

                        chk=2;  

                    }  

                }

            }</p>

<p>            

            if(scroll_H <= s_top_2){</p>

<p>                if (chk==2){

                    //이동

                    

       

                    function allComplete(){

                        console.log('2단계');

                        chk=1;  

                    }  

                }

            }</p>

<p>

            if(scroll_H <= s_top_1){</p>

<p>                if (chk==1){

                    //이동              

                    function allComplete(){

                        console.log('1단계');

                        chk=0;    

                    }

                }

            } </p>

<p>            </p>

<p>            </p>

<p>

        

        }</p>

<p>        });

    });

// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 스크롤 작업 [E] +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</p>

<p>

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인