3

我有一个 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");
        };
    });

});

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

4

4 回答 4

3

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

        topParentx = $('#tinyMCEwrapper').position().top;
        var topTarget = "0px";
        if ($(this).scrollTop() >= topParentx){
            topTarget = ($(this).scrollTop()-topParentx) + "px";
        }
        $('.mceExternalToolbar').stop().animate({top, topTarget}, 500);
于 2009-10-31T16:13:13.430 回答
1

您可以使用 jQuery 特殊事件来创建滚动停止事件。James Padolsey 编写了一个很好的 scrollstop 事件示例

于 2009-11-17T16:59:47.213 回答
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);
        });
    }
});
于 2009-12-16T13:07:50.767 回答
0

好吧,虽然我昨天很高兴...今天现实又回来了... 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');

        });

    });

});
于 2009-11-01T14:25:12.913 回答