javascript - 滚动动画在 IE 和 Mozilla 上不起作用

标签 javascript jquery html css

我有一个填满屏幕的元素,在那个元素下面是另一个元素,但是这个元素是隐藏的,所以你不能手动滚动到它。

为此,我的 CSS 样式表如下所示:

body {
    height: 100%;
    width: 100%;
    margin: 0;
    padding: 0;
}
#page1, #content {
    height: 100%;
    width: 100%;
    position: absolute;
}
#content {
    top: 100%;
    display:none;
}

#page1 代表填满屏幕的元素,#content 代表其下方的元素。

当我点击第一个元素(填满屏幕)上的按钮时,它会显示其下方的元素并顺利向下滚动到该元素。

我首先使用的是这段代码:

$(document).ready(function() {
    $('#exploreBtn').on('click', function() {
        $('#content').fadeIn(500);
        console.log($("#content").offset().top)
        $('html, body').animate({
            scrollTop: $("#content").offset().top
        }, 1000, function(){
            $("#page1").css('display','none');
            $('#content').css('top',0);
            $(document).scrollTop(0);
        });
    });
});

它在 IE 和 Mozilla 中有效,但我试图改进它...

现在我正在使用这段代码:

$(function() {
    var headerLoaded = true,
            contentLoaded = false,
            header = "#fitScreen",
            exploreBtn = "#exploreBtn",
            scrollBackBtn = "#scrollBackBtn",
            content = "#content";



    $(exploreBtn).on('click', function() {
        if (!contentLoaded && headerLoaded) {
            showScrollHide(content, header, function() {zit
                var sum = ($('nav').height()) + parseInt($('nav').css('margin-bottom'));
                $('#panelContent').css('margin-top', sum);
                
               
                $('#content').css('top', 0);
                $('html, body').css('overflow-y', 'auto');
                
                $(window).scrollTop(0);

                headerLoaded = false;
                contentLoaded = true;
            });
        }
    });

    var showScrollHide = function(element, hide, func) {
        $(element).fadeIn(500, function() {
            $('body').animate({
                scrollTop: $(element).offset().top
            }, 1000, function() {
                $(hide).fadeOut(100, func);
            });
        });
    };

});

并且出于某种原因,它不适用于 IE 和 Mozilla。

它只是给了我一点延迟,然后它在我滚动到的屏幕上消失了。

谁能帮我解决这个问题?

最佳答案

在你的新代码中,你有这部分:

$(element).fadeIn(500, function() {
    $('body').animate({
        scrollTop: $(element).offset().top
    }, 1000, function() {
        $(hide).fadeOut(100, func);
    });
});

您的工作代码和不工作代码之间的区别在于您为滚动设置动画的元素。

在您的工作代码中,您正在为 'body, html' 设置动画。根据浏览器的不同,滚动条不在同一个元素上。因此,这就是为什么你应该同时定位 html 和 body 元素:

$(element).fadeIn(500, function() {
    $('html, body').animate({ //HERE!
        scrollTop: $(element).offset().top
    }, 1000, function() {
        $(hide).fadeOut(100, func);
    });
});

关于javascript - 滚动动画在 IE 和 Mozilla 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23640907/

相关文章:

javascript - 切换菜单未显示 - Bootstrap 3

javascript - 不显示文本区域占位符文本

javascript - 如何使用 jQuery 在菜单悬停时创建滑动动画?

javascript - jquery 中的变量转义

html - 如何调试书签 anchor 不起作用

javascript - 无法让 jquery.data() 或 .attr() 工作都返回未定义

javascript - 在C3.js中设置图形名称

javascript - Knockout - 访问对象数组中的属性

javascript - 生成唯一的数字

android - 在 HTML 中构建底部工具栏并在 IPHONE 上显示它