[英]Pass Variables to JQuery Waypoints
我正在尝试使用JQuery Waypoints做一个变色标题。 我有一组对象,这些对象显示了一页网站的各个部分及其相关的颜色(如下所示):
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'}
);
然后,我使用下面的脚本为每个部分(在HTML中标记为<section id="...">
)创建JQuery Waypoint:
// 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循环时,它可以工作,但这需要大量的代码重复。 如果以后添加更多部分,我希望做的修改尽可能少。
使用警报进行调试时,我发现所有Waypoint都将i
视为9(这将是最大值)-有没有办法将正确的i
值直接传递给每个Waypoint,或者有更好的解决方法这个?
在调用回调函数的那一刻,var i
的值为9
(所有回调函数仍具有对i
的相同引用)。 因此,您应该传递实际值。 例如:
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"
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.