控制页面滚动动画与鼠标滚轮控制页面滚动动画与鼠标滚轮(Control page scroll ani

2019-06-12 04:58发布

任何人可以帮助我了解如何本田实现这种效果: http://testdays.hondamoto.ch/

我的意思是方便,当你滚动。

Answer 1:

 var $pages = $(".page"), tot = $pages.length, c = 0, pagePos = 0, down = 0, listen = true; $('html, body').on('DOMMouseScroll mousewheel', function(e) { e.preventDefault(); if(!listen)return; listen = false; down = e.originalEvent.detail > 0 || e.originalEvent.wheelDelta < 0; c = Math.min(Math.max(0, down ? ++c : --c), tot-1); pagePos = $pages.eq(c).offset().top; $(this).stop().animate({scrollTop: pagePos}, 650, function(){ listen = true; }); }); 
 *{margin:0;} .page{min-height:100vh;} 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="page" style="background:#0bf">PAGE 1</div> <div class="page" style="background:#fb0">PAGE 2</div> <div class="page" style="background:#0fb">PAGE 3</div> <div class="page" style="background:#b0f">PAGE 4</div> 

PS:
使用.position().top; 如果你的.page s为像一个滚动的DIV内$("#pagesParent")而不是$('html, body')


注意:
移动你可能需要调整值占浏览器的标签栏高度(或最佳,防止行为在所有)。 你有这个想法



Answer 2:

打开他们的JS文件: http://testdays.hondamoto.ch/js/script_2.js

并搜索utils的 - 导航

/***********************************************************************************************/
/************************************  Utils - Navigation  *************************************/
/***********************************************************************************************/
/**
 * navigation
 */
function navigation(target){
    //--Init Quiz
    if(!quizRdy){
        hideQuiz();
    }

    //Add class to body
    var pageName = target.substr(1).split('-');
    $('body').removeClass(lastPage);
    $('body').addClass(pageName[0]);
    lastPage = pageName[0];

    if(resizeBg)retractBg();
    resizeBg = false;
    busy = true;
    $('body').addClass('loading');

    //Change Nav Color
    $('#nav-wrapper ul.nav li a').each(function(){
        $(this).removeClass('selected');
    });
    var currentNavNumber = currentNav +1;
    $('#main_nav_'+currentNavNumber).addClass('selected')

    var wHeight = $(window).height();
    if(wHeight<1080){
        var newMargin = 180 - ( (wHeight - 720)/2 ) ;
        if(newMargin<0) newMargin=180;
    }else{
        var newMargin =0 - (wHeight - 1080)/2;
    }

    var navTop = $(target).offset().top + newMargin;
    navTop += 'px';
    trace('navTop : '+navTop);
    //$('#nav-wrapper').css('top',navTop);

    $('html,body').stop().animate({
        scrollTop: $(target).offset().top + newMargin
    }, 1000,'easeInOutExpo',function(){
        trace('annime done - wHeight : '+wHeight+' target top : '+$(target).offset().top);

        if(currentNav==2 && !quizRdy && !quizForm){
            showQuiz();
        }
        if(currentNav==4){
            //update social datas
            $.getJSON('inc/socials.php', function(data) {
                $('#count-fans').empty().append(data['fans-count']);
                $('#count-followers').empty().append(data['followers-count']);
            });
        }
        /*
        if(currentNav==2){
            $('#quiz-nav').livequery(function(){
                $(this).show();
            });
        }else{
            $('#quiz-nav').livequery(function(){
                $(this).hide();
            });
        }
        */
        $('body').removeClass('loading');
        if(currentNav!=0 && currentNav!=4){
            $('#nav-wrapper').fadeIn(200);
        }else{
            $('#nav-wrapper').fadeOut(200);
        }
        if(currentNav==3){
            //--Init Google Map
            if(!mapReady){
                if(dealerReady){
                    //init map
                    initialize();
                }else{
                    askMap = true;
                }
            }
        }
        if(wHeight>1080){
            extendBg();
        }
        busy = false;
    });
}

/**
 * navigation next Page
 */
function nextPage(){
    if(currentNav<navArray.length-1 && !busy){ 
        currentNav++;   
        navigation(navArray[currentNav]);
    }
}
/**
 * navigation previous Page
 */
function prevPage(){
    if(currentNav>0 && !busy){ 
        currentNav--;   
        navigation(navArray[currentNav]);
    }
}

/**
 *  Center content
 */
function centerContent(){
    if(!busy){
        //--Retract Background if expended for big screen
        if(resizeBg)retractBg();

        var wHeight = $(window).height();
        var wWidth = $(window).width();
        var imgHeight = 0;

        //--Test image width / Height and fill the screen 
        if(wWidth / wHeight > ratioImg ){
            //trace('case1 -   width : ' + wWidth + '   height : '+wHeight);
            if(wHeight > 1080 || wWidth > 1900){
                var newImgHeight = wWidth * 1080 / 1920;
                $(".bg-image").each(function(){
                    $(this).css({
                        'height':newImgHeight+'px',
                        'width':'100%'
                    });
                });
                imgHeight = newImgHeight;
            }else{
                $(".bg-image").each(function(){
                    $(this).css({
                        'height':'1080px',
                        'width':'1900px'
                    });
                });
                imgHeight = 1080;
            }
        }else{
            if(wHeight > 1080 || wWidth > 1900){
                $(".bg-image").each(function(){
                    var newImgWidth = wHeight * 1920 / 1080;
                    $(this).css({
                        'height':wHeight+'px',
                        'width':newImgWidth+'px'
                    });
                });
                imgHeight = wHeight;
            }else{
                $(".bg-image").each(function(){
                    $(this).css({
                        'height':'1080px',
                        'width':'1900px'
                    });
                });
                imgHeight = 1080;
            }
        }
        //--Fix height if window > img height
        if(wHeight>imgHeight){
            $(".bg-image").each(function(){
                var newImgWidth = wHeight * 1920 / 1080;
                $(this).css({
                    'height':wHeight+'px',
                    'width':newImgWidth+'px'
                });
            });
        }
        //--Center horizontal bkg image
        if(wWidth<1900){
            $(".bg-image").each(function(){
                var marginCenter = (wWidth - 1900) / 2;
                marginCenter = marginCenter * -1;
                if($(this).width() > (wWidth + marginCenter)){
                    $(this).css({'margin-left':-marginCenter+'px'});
                }
            });
        }
        //--Scroll to the good position
        if(wHeight<1080){
            var newMargin = 180 - ( (wHeight - 720)/2 ) ;
            if(newMargin<0) newMargin=180;
        }else{
            var newMargin =0 - (wHeight - 1080)/2;
        }
        var navTop =$(navArray[currentNav]).offset().top + newMargin;
        navTop += 'px';
        //$('#nav-wrapper').css('top',navTop);
        //trace('Scrool to good position, then expend bg : ' + navArray[currentNav] + '  '+ $(navArray[currentNav]).offset().top);
        $('html,body').stop().animate({
            scrollTop: $(navArray[currentNav]).offset().top + newMargin
        }, 1000,'easeInOutExpo',function(){
            if(wHeight>1080){
                extendBg();
            }
        });
    }
}

/**
 *  Extend the background image for big screen ( > 1080 px )
 */
function extendBg(){
    var hWin = $(window).height();
    if(hWin > 1080){
        //--Get & save current page Name
        lastBg = navArray[currentNav].split('-');
        lastBg = lastBg[0].substr(1);
        lastheight = $('#bg-'+lastBg).height();
        //--Calculate the position from top to set the scroll position
        posToTop = (hWin - $('#bg-'+lastBg).height())/2;
        posToTop = $('#bg-'+lastBg).offset().top - posToTop;
        lastPosToTop = $('#bg-'+lastBg).offset().top;
        //trace('posToTop setting : '+posToTop+' page : ' + lastBg);
        //--Set boolean resize to true to call the retract BG
        resizeBg = true;
        $('#bg-'+lastBg).css({'z-index':2});
        //--Test if it's first or last
        if(currentNav != 0 && currentNav != (navArray.length-1)){
            $('#bg-'+lastBg).animate({
                height:hWin+'px',
                top:posToTop+'px'
            },600);
        }else{
            if(currentNav==0){
                posToTop=0;
                $('#bg-'+lastBg).animate({
                    height:hWin+'px',
                    top:0
                },600);
            }else{
                posToTop=0;
                $('#bg-'+lastBg).animate({
                    height:hWin+'px',
                    top:4320+'px'
                },600);
            }
        }
        //--Scroll to the bottom for credits page
        if(currentNav==(navArray.length-1)){
            $('html,body').stop().animate({
                scrollTop: $(document).height()
            }, 1000,'easeInOutExpo');
        }
    }
}
/**
 *  Retrac the background to normal
 */
function retractBg(){
    var hWin = $(window).height();
    if(resizeBg && lastheight>0 && lastBg!=""){
        $('#bg-'+lastBg).css({'z-index':0});
        //trace('posToTop callback : '+posToTop + ' lastBg :  ' +  lastBg + '  lastheight : ' +lastheight);
        if(posToTop>0){
            //trace('reset pos top : ' + posToTop);
            $('#bg-'+lastBg).animate({
                height:lastheight+'px',
                top:lastPosToTop+'px'
            },600)
        }else{
            $('#bg-'+lastBg).animate({
                height:lastheight+'px'
            },600)
        }
    }
}


文章来源: Control page scroll animation with mousewheel