Javascript 滑翔机幻灯片选项卡不能使用两个幻灯片-原型

Javascript 滑翔机幻灯片选项卡不能使用两个幻灯片-原型,javascript,slider,prototype,Javascript,Slider,Prototype,我在一页上有两张滑翔机幻灯片。滑块#1(#滑块)将显示滑块#2(#滑块2)的活动选项卡,而不是滑块#1的活动滑块。我需要链接将其类更改为“活动”以获得正确的滑块。 这就是它发生的地方: this.current = $(element); $$('#slider div.controls a.active').invoke('removeClassName', 'active'); $$('#slider2 div.controls a.active').invoke('removeClas

我在一页上有两张滑翔机幻灯片。滑块#1(#滑块)将显示滑块#2(#滑块2)的活动选项卡,而不是滑块#1的活动滑块。我需要链接将其类更改为“活动”以获得正确的滑块。

这就是它发生的地方:

this.current = $(element);

$$('#slider div.controls a.active').invoke('removeClassName', 'active');
$$('#slider2 div.controls a.active').invoke('removeClassName', 'active');
$$('#slider a[href="#'+this.current.id+'"]').invoke('addClassName', 'active');
以下是我的HTML代码:

<a href="#section1">1</a>
<a href="#section2">2</a>
<a href="#section3">3</a>

示例小提琴

您以错误的方式使用了
$
符号

在Prototype中,
$
$$
彼此有很大的不同:

  • $
    等于
    document.getElementById
    ,返回匹配的元素,如果找不到,则返回
    null
  • $
    等于
    文档。querySelectorAll
    ,返回包含匹配元素的数组,如果未找到,则返回
    []
您的代码应该如下所示:

$$( '#slider div.controls a.active' ).invoke( 'removeClassName', 'active' );
$$( 'a[href=' + this.current.id + ']' )[0].addClassName( 'active' );

好的,原来的一张只适用于一张幻灯片,这里有一个针对多张幻灯片的技巧:

// glider.js
addObservers: function() {
  var controls = this.wrapper.getElementsBySelector('.controls a');
  controls.invoke('observe', 'click', this.events.click);
}

moveTo: function(element, container, options){
  this.current = typeof element === 'string' ? this.wrapper.getElementsBySelector( '#' + element )[0] : $( element )

  this.wrapper.getElementsBySelector( '.controls a.active' ).invoke( 'removeClassName', 'active' )
  this.wrapper.getElementsBySelector( 'a[href="#' + this.current.id + '"]' ).invoke( 'addClassName', 'active' )

  Position.prepare();
  var containerOffset = Position.cumulativeOffset( container ),
  elementOffset = Position.cumulativeOffset( this.current );

  this.scrolling  = new Effect.SmoothScroll(container, 
    {duration:options.duration, x:(elementOffset[0]-containerOffset[0]), y:(elementOffset[1]-containerOffset[1])});
  return false;
}

在我的机器上测试。

您确定$jQuery不是另一个库吗?jQuery中没有addClassName。它使用Prototype实现效果。我从这里得到了这段代码。你能把你的代码放在一个表中吗?我猜你
$
不代表jQuery,因为jQuery在没有找到元素的情况下返回
jQuery([])
,但不是
null
。你在同一页上使用prototype和jQuery吗?这只适用于一个滑块。我需要它来处理两个滑块。@Daniel在JSFIDLE或jsbin上发布一个包含两个幻灯片的示例代码,并澄清您的问题。@Daniel如果需要“单击幻灯片1,幻灯片2更改幻灯片而不是幻灯片1”,我想您可以在幻灯片1上绑定一个单击事件,如果它被触发,则触发幻灯片2的单击事件。