Animate Body滚动问题

时间:2016-12-03 18:33:53

标签: javascript jquery

在我的网站上,我将有一个左右面板。右侧面板包含所有链接,左侧面板包含所有视频。当用户点击链接时,我必须使用平滑动画为主体滚动设置动画,并需要通过应用新类名突出显示特定视频背景,而滚动时需要删除类名(新类名)。这是我的问题是在添加新类名时应用动画效果时有些延迟。任何人都可以帮助我们解决这个问题。 在这里我附上代码。请检查。

jQuery(document).ready(function(){  
    jQuery('.sub-cat-list a[href*="#"]').click(function (e){    
        e.preventDefault();
        var clickURL = jQuery(this).attr('href'); 
        var target = this.hash; 
        var offTop =  parseInt(jQuery(target).offset().top);
        var scroLtoP = parseInt(jQuery(window).scrollTop());

        if (typeof(jQuery(target).offset()) != 'undefined') { 
            jQuery( "html, body" ).animate({
                scrollTop: offTop 
             },800).promise().done(function(even) { 
                jQuery(target).parent().addClass('focusin');
                setTimeout(function(){                      
                    removeFocClass(target); 
                },900);
            });         
        }
    });

function removeFocClass(curEle)
{
    var menuTargetFC = jQuery(curEle).parent().hasClass('focusin');     
    if(menuTargetFC)
    {       
        jQuery(window).scroll(function(){           
            jQuery(curEle).parent().removeClass('focusin');         
        });     
    }   
    else{
        jQuery(curEle).parent().addClass('focusin');        
    }       
}
});

1 个答案:

答案 0 :(得分:0)

为什么不改变这个:

jQuery( "html, body" ).animate({
            scrollTop: offTop 
         },800).promise().done(function(even) { 
            jQuery(target).parent().addClass('focusin');
            setTimeout(function(){                      
                removeFocClass(target); 
            },900);
        });         

到此:

jQuery(target).parent().addClass('focusin');
jQuery( "html, body" ).animate({
            scrollTop: offTop 
         },800).promise().done(function(even) { 
            setTimeout(function(){                      
                removeFocClass(target); 
            },900);
        });      

因此您将在制作动画之前添加类,并避免800ms的动画延迟。