当页面滚动到每个元素时,我试图使css动画正确关闭,因此我以以下jquery为例:

// element animation scroll detection
(function ($, document, undefined) {
    var animation1 = $('.animation1').offset().top;

    $(window).scroll(function() {
        var winTop = $(window).scrollTop();
        var winHeight = $(window).height();

        if(winTop >= (animation1-winHeight)){
        $('.animation1').addClass("animate-from-left");
        }

        $('.scrollTop').html("scrollTop: "+winTop);
        $('.elementOffset-top').html(" element Offset.top: "+animation1);
    });
})(jQuery, document);


这是此版本的实时版本:http://bbmthemes.com/themes/smart/

.animation1是第一个动画的div。在该div的正上方,我使用了jquery输出animation1的Offset.top值以及scrollTop的值,scrollTop在滚动时更新。

我不明白的是,为什么当我滚动以使jquery变量输出恰好位于屏幕的顶部边缘时,它是否会说scrollTop距离比div.animation1的Offset.top大了约430px,这基本上就是触摸屏幕的上边缘?

当触发动画时,这完全不合时宜,而且当它们位于页面的不同部分时,我无法使它们一致地工作,因为这两个值的差异不断变化。

我试图将其放入jsfiddle中,但是我无法以相同的方式复制该问题。这是一个非常混乱的版本,但是输出的值并不完全相同:http://jsfiddle.net/UsgNY/1/

最佳答案

即使布局似乎是动态更改的,animation1变量也不会更新。结果是animation1保留了最初放置animation1的偏移量。为了解决这个问题,您只需要在每次滚动页面时在本地设置要初始化的变量。像这样:

// element animation scroll detection
(function ($, document, undefined) {

    $(window).scroll(function() {
        var winTop = $(window).scrollTop();
        var winHeight = $(window).height();
        var animation1 = $('.animation1').offset().top;

        if(winTop >= (animation1-winHeight)){
        $('.animation1').addClass("animate-from-left");
        }

        $('.scrollTop').html("scrollTop: "+winTop);
        $('.elementOffset-top').html(" element Offset.top: "+animation1);
    });
})(jQuery, document);


您当然可以使用每次布局更改时都会更新的全局变量,但是我发现此解决方案更容易。

这是一个更正的jsFiddle:http://jsfiddle.net/gL2y4/

10-04 15:46