javascript - 当元素到达视口(viewport)顶部时将数据类型值设置为元素

标签 javascript jquery html css

我在每个部分都存储了一个十六进制颜色值,当一个部分到达屏幕顶部时(标题为 -180 像素),我想为标题元素分配一个 css 属性,以便在您更改文本颜色时滚动浏览各个部分。我没有收到任何错误,而且我在调试这个问题时遇到了问题。

http://www.amypreston.co.uk/

$(window).load(function() {
    var $header = $("header");
    var numberOfSections = $("section").length;   
    var sectionOffsets = [];
    var sectionColour = $("section").eq(i).data("colour");

    for(var i = 0; i < numberOfSections; i++) {
        sectionOffsets.push($("section").eq(i).offset().top);
    }            

    $(window).scroll(function() {
        var scrollTop = $(this).scrollTop();            

        for(var i = 0; i < numberOfSections; i++) {
            if(scrollTop > sectionOffsets[i] - 180) {
                $header.css('color', 'sectionColour');
            }
        }
    });
});

最佳答案

不知道是不是偶然发生的,但是这条线

var sectionColour = $("section").eq(i).data("colour");

不合时宜。它使用仅在窗口滚动处理程序中定义的变量 i

请注意,您需要在每次滚动处理程序运行时检索部分颜色,而不仅仅是在窗口加载时。您需要将上面的这一行放在滚动处理程序内的循环中。

此外,如评论所述,您需要将 sectionColour 用作变量,而不是像现在这样用作字符串。必须删除单引号,所以 'sectionColour' 变成 sectionColour

这是你的固定代码:

$(window).load(function() {
    var $header = $("header");
    var numberOfSections = $("section").length;   
    var sectionOffsets = [];

    for(var i = 0; i < numberOfSections; i++) {
        sectionOffsets.push($("section").eq(i).offset().top);
    }            

    $(window).scroll(function() {
        var scrollTop = $(this).scrollTop();            

        for(var i = 0; i < numberOfSections; i++) {
            if(scrollTop > sectionOffsets[i] - 180) {
                var sectionColour = $("section").eq(i).data("colour");
                $header.css('color', sectionColour);
            }
        }
    });
});

附带说明一下,您可以将代码缩短为:

$(window).scroll(function () {
     $("section").each(function () {
        if ($(window).scrollTop() > $(this).offset().top - 180) {
            $("header").css('color', $(this).data("colour"));
        }
    });
}).scroll();

关于javascript - 当元素到达视口(viewport)顶部时将数据类型值设置为元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27876824/

相关文章:

javascript - 将 json 文件链接到 html 正文中

javascript - 我如何定位 div 以使其在点击功能期间不可见?

javascript - 带有 setLine() 的 Ace 编辑器?

html - 将 div 框与 CSS 网格对齐时出现问题

JavaScript 在 Chrome 扩展 HTML 桌面通知中不起作用

javascript - 在 Youtube API 中启用直播

javascript - SimpleModal - 如何将电子邮件地址传递给确认模式?

jquery-mobile - 如何使用 jQuery 函数实现 jQuery Mobile 页面滑动?

javascript - 所有元素加载后发出警报

javascript - TypeError : otherStatus. 替换不是函数