基于不同滚动位置的动画标题

Posted

技术标签:

【中文标题】基于不同滚动位置的动画标题【英文标题】:Animate Header based on different scroll positions 【发布时间】:2015-08-17 00:32:58 【问题描述】:

目前我有一个标题,在滚动一定数量的像素后,它会动画(挤压)到具有不同徽标和不同导航的较小版本。如果用户向上滚动超过该像素量(在本例中为 170),则标题将扩展回其正常状态。现在(因为网站上有一些很长的页面)我的客户希望在用户向上滚动的任何时候“扩展”标题。我想我已经接近了,但是当我开始向上滚动页面时,这些事件正在触发无数次。这是我当前的 javascript

function squishHeader() 
    compactHeader = true;
    header.animate(height: '48px', 500);
    mainNav.fadeOut("fast");
    logo.fadeOut("fast");
    scrollLogo.delay(300).slideDown("fast");
    if (overlayIsVisible == true) 
        overlay.fadeOut("slow");
        overlayIsVisible = false;
    


function expandHeader() 
    compactHeader = false;
    header.animate(height: '130px', 100);
    scrollLogo.css("display", "none");
    logo.fadeIn("slow");
    mainNav.delay(300).fadeIn("fast");



var compactHeader = false;
var lastScrollTop = 0;
$(window).on('scroll', function() 

    if (win.width() > 1024) 
    scrollPosition = $(this).scrollTop();
        if (scrollPosition >= 170 && !compactHeader) 
            squishHeader();
        
        else if (scrollPosition < 170 && compactHeader) 
            expandHeader();
        
        else if ( scrollPosition < lastScrollTop && compactHeader)
            expandHeader();
        
        lastScrollTop = scrollPosition;
    
);

有人可以帮我解决这个问题,这让我发疯了!提前致谢

【问题讨论】:

【参考方案1】:

我想你在找jQuery Debounce

jQuery throttle / debounce 允许您以多种有用的方式对函数进行速率限制。将延迟和回调传递给 $.throttle 会返回一个新函数,该函数每延迟毫秒执行一次。将延迟和回调传递给 $.debounce 会返回一个只执行一次的新函数,在开始或结束时将多个顺序调用合并为一次执行。

基本上,这将使您的函数被调用的速度不会超过您设置的限制。所以你可以这样做(取自 https://***.com/a/9144827/2687861),这将 $('#scrollMsg').html('SCROLLING!'); 限制为每 250 毫秒调用一次。

$(window).scroll($.debounce( 250, true, function()
    $('#scrollMsg').html('SCROLLING!');
));

一些轻松的阅读。 http://davidwalsh.name/javascript-debounce-function

【讨论】:

这有帮助,但现在每次我移动鼠标(每 250 毫秒)我的标题都会改变。我只希望它在向上滚动时扩展。有任何想法吗。感谢您的帮助! 您提供的代码中没有任何内容会导致您的on scroll 函数在鼠标移动时触发。如果您提供完整的代码,我可能会弄清楚那部分。我创建了一个你试图达到的效果的工作小提琴jsfiddle.net/wfp2uhjb/1 请注意第一个 if 语句中的额外语句scrollPosition &gt; lastScrollTop。这是在向上滚动时防止标题“挤压”所必需的。

以上是关于基于不同滚动位置的动画标题的主要内容,如果未能解决你的问题,请参考以下文章

如果动画,UIScrollView 滚动到不同的位置

UIScrollView 在模态视图控制器的动画演示中滚动到不同的位置

基于scrollView动态改变位置

vue 基于原生动画的自动滚动表格

当代表具有不同的宽度时,QML ListView 滚动不会产生任何动画

动画滚动到滚动上的特定页面位置