首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将变量传递给JQuery路径点

将变量传递给JQuery路径点
EN

Stack Overflow用户
提问于 2013-08-27 09:03:19
回答 1查看 730关注 0票数 1

我试图使用JQuery方法点做一个改变颜色的标题。我有一组对象,显示一页网站的各部分及其相关颜色(见下文):

代码语言:javascript
复制
var colours = new Array(
    {section: 'home', colour: '#000'},
    {section: 'video-audio', colour: '#EF6E7C'},
    {section: 'motion-graphics', colour: '#FBC57A'},
    {section: 'graphic-design', colour: '#FFF9A9'},
    {section: 'web-development', colour: '#AAD693'},
    {section: 'social-media', colour: '#6D8DC9'},   
    {section: 'photography', colour: '#8A6FB0'},    
    {section: 'talent', colour: '#C57AB3'},     
    {section: 'contact', colour: '#000'}
);

然后,我将使用下面的脚本为每个部分创建JQuery路径点(在<section id="...">中标记为<section id="...">):

代码语言:javascript
复制
// top bar whose background-colour is being changed
var $topBar = $('.top-bar');

var offsetNum = 0, // pixels to offset waypoints
    animateTime = 300, // milliseconds to animate
    fallbackColour = '#333';

// len is number of sections (length of colours array)
var len = (typeof colours == 'undefined') ? 0 : colours.length;

if (len > 1) {
    for (var i = 0; i < len; i++) {
        var curColour = ('colour' in colours[i]) ? colours[i].colour : fallbackColour,
            curSection = ('section' in colours[i]) ? colours[i].section : 'unknown';

        $('#' + curSection).waypoint(function(direction) {
            if (i > 0 && i < len) {
                curColour = (direction === 'down') ?
                    (colours[i+1].hasOwnProperty('colour') ? colours[i+1].colour : fallbackColour) :
                    (curColour = colours[i-1].hasOwnProperty('colour') ? colours[i-1].colour : fallbackColour);
            }

            // first or last waypoint
            $topBar.stop().animate({backgroundColor: curColour}, animateTime);
        }, { offset: offsetNum });
    }
}

当我只是手动为每个部分创建路径点而不是使用一个对象数组和一个for循环时,它起了作用,但这是大量的代码重复。如果以后添加了更多的部分,我希望尽可能少地进行修改。

在使用警报进行调试时,我发现所有的路径点都将i视为9(最大值将是9)--是否有任何方法直接将正确的i值传递给每个Waypoint,或者有更好的方法解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-27 09:36:16

在调用回调时,var i具有值9 (所有回调仍然具有对i的相同引用)。所以你应该传递实际值。例如:

代码语言:javascript
复制
for (var i = 0; i < len; i++) {

    var curSection = ('section' in colours[i]) ? colours[i].section : 'unknown'; 

    addWaypoint(i, curSection);
}

function addWaypoint( n, curSection ){

    // n now has the value 0, 1, 2, etc. instead of referencing i

    $('#' + curSection).waypoint(function(direction) {
        console.log(i, direction); // 0, "down"
    });    
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18461258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档