jQuery - 滚动上的淡出/“滚动停止”上的淡入

Posted

技术标签:

【中文标题】jQuery - 滚动上的淡出/“滚动停止”上的淡入【英文标题】:jQuery - fadeOut on Scroll / fadeIn on "scrollstop" 【发布时间】:2010-12-11 21:44:07 【问题描述】:

我有一个 div 定位工作,它被滚动事件触发。滚动事件被触发了很多次会导致闪烁的 div 会发生什么。我的计划是在不再触发滚动事件时淡出该 div 并淡入。如何检查滚动是否结束?我考虑了超时 滚动的组合,但实际上没有像我希望的那样起作用。这是我到目前为止所得到的。

$(document).ready(function()

    //var animActive = false;

    $(window).scroll(function() 

        /*
        if (animActive == false)
            animActive = true;
            $('.mceExternalToolbar').fadeOut(100, function () 
                $('.mceExternalToolbar').fadeIn(3000, function () 
                    animActive = false;
                    console.log("NOW");
                );
            );
        
        */

        topParentx = $('#tinyMCEwrapper').position().top;
        if ($(this).scrollTop() >= topParentx)
            $('.mceExternalToolbar').css('top', ($(this).scrollTop()-topParentx) + "px");
         else 
            $('.mceExternalToolbar').css('top', "0px");
        ;
    );

);

如您所见,我在其中留下了最后一次尝试,但是淡入淡出函数的回调没有按预期工作。

【问题讨论】:

【参考方案1】:

修复滚动时不跳动!设置超时

var animActive = false;
$(window).scroll(function()
    if (animActive == false)
        animActive = true;
        $('#target').fadeOut(100, function () 
            var scrl = setTimeout( function()
            animActive = false;
            $('#target').fadeIn(500);
            , 2000);
        );
    
);

【讨论】:

【参考方案2】:

您可以使用 jQuery 特殊事件来创建滚动停止事件。 James Padolsey 写了一篇很棒的 example of scrollstop event。

【讨论】:

【参考方案3】:

好吧,虽然我昨天很高兴...今天现实又回来了... SAFARI 的反应是不重新渲染移动 div 后面的所有必要片段。特别是在 tinyMCE 的 iframe 上。 所以我最终得到了以下内容,并且效果很好。淡出 div -> 动画到位置 -> 仅在触发回调时淡入..

$(document).ready(function()

    $(window).scroll(function() 

        topParentx = $('#tinyMCEwrapper').position().top;

        var topTarget = "0px";

        if ($(this).scrollTop() >= topParentx)
            topTarget = ($(this).scrollTop()-topParentx) + "px";
            $('.mceExternalToolbar').animate(opacity: 0, 1);
        
        $('.mceExternalToolbar').stop().animate(top: topTarget, 200, 'swing', function()
            $('.mceExternalToolbar').animate(opacity: 1, 100, 'swing');

        );

    );

);

【讨论】:

【参考方案4】:

不幸的是,没有滚动停止的概念,因此您无法真正从中触发动画。更好的做法是为您的 div 的“顶部”属性设置动画,以便它平滑地滑动到新位置而不是闪烁。

        topParentx = $('#tinyMCEwrapper').position().top;
        var topTarget = "0px";
        if ($(this).scrollTop() >= topParentx)
            topTarget = ($(this).scrollTop()-topParentx) + "px";
        
        $('.mceExternalToolbar').stop().animate(top, topTarget, 500);

【讨论】:

嘿,谢谢...这不是我的计划,但我必须承认,它的工作要好得多...尤其是从来没有偶然发现 stop() 函数,在这种情况下非常方便。 ..所以谢谢...为了使您的示例与我的jquery版本一起使用,需要快速查看参考wwas,因为必须将css定义称为: $('.mceExternalToolbar').stop().animate(顶部:顶部目标,200);谢谢!!!这对我帮助很大!!! 很高兴它对你有用,感谢更新和代码修复。我已经更新了我的代码。

以上是关于jQuery - 滚动上的淡出/“滚动停止”上的淡入的主要内容,如果未能解决你的问题,请参考以下文章

iOS 上的 Safari 仅在滚动停止后显示固定元素

没有jQuery mobile的滚动停止事件[重复]

fadeTo 与 Jquery 在 Retina Macbook Pro 上的 Chrome 中不起作用

FullPage.js 在桌面上的淡入淡出效果,在较小的设备上禁用并获得默认滚动

Jquery淡入淡出背景/表格行上的动画背景颜色

修复滚动时延迟的jquery淡入淡出