0

我不明白一旦设置了函数的初始参数,如何更新它们。

我正在使用一个名为serialScroll的插件。插件滚动到初始 $(elem).serialScroll({//...}) 设置中指示的项目。

我想要做的是在用户与页面交互时重新定义该项目的名称。我有另一个变量,它在用户滚动时成功获取信息,我有这么多。

我要做的就是让 serialScroll({)}使用该变量相应地更新它的“item: _ ”字段。

这是serialScroll代码:

    var nextClass = ".fig4"; 

    // this is being changed to .figN depending on the users 
    // scrolling position in the browser/viewport (successfully). 
    // For proof of communication purposes I forced nextClass 
    // here to equal .fig4 to see if the two are at lest talking to 
    // each other, which they are... but now how do i update "items:" 
    // below to reflect the change in the "nextClass" variable?

$('html').serialScroll({
    target:'body',
    items: nextClass, 
    next:'#nextImage',
    axis:'y',
    duration:700,
    force:true, 
});
4

2 回答 2

1

JavaScript 对象是动态的,您可以随时向它们添加方法。由于 serialScroll 是一组动态添加到它被调用的元素的函数,因此有两种方法可以完成您需要的操作:

  1. 在插件代码中添加一个 setter - 这将使它适用于所有安装
  2. 初始化后,猴子修补serialScroll的每个实例

如果您只有一个实例,则后者更容易并且应该证明更向前兼容:

$('html').serialScroll({...});
$('html').serialScroll.setItems = function(i){
  items = i;
}
// when nextClass changes
$('html').serialScroll.setItems(nextClass);

要完成第一个选项,您需要破解 serialScroll 代码本身。

于 2011-04-20T18:04:17.420 回答
1

这里发生的情况是,当 .serialScroll 被初始化时,它获得了一次 nextClass 的值,这就是它使用的值。

需要发生两件事中的一件。要么修改插件以使用全局变量(不是非常理想,但它可以工作),要么每次 nextClass 更改时,都需要重新初始化 .serialScroll。

于 2011-04-20T17:34:42.703 回答