1

我在 Drupal 7 上安装了一个 Jcarousel,但是当客户端悬停在箭头上时,我需要它水平滚动到两侧。

我一直在尝试将变量传递给 Timeout 函数,但它似乎不起作用。在下面的代码中 Timeout 只识别: var n = function () {c.next();}; 我需要能够告诉超时使用 c.prev() 或 c.next() 向左或向右滚动,具体取决于用户单击的箭头。

var c = this;
var k = 1;
var n = function () {c.next();};

if (k == 1) n = function () {c.prev();};
if (k == 5) n = function () {c.next();};

this.timer = window.setTimeout(n, 500)

我也尝试过这样做,但它也不起作用。

var c = this;
var k = 5;
this.timer = window.setTimeout(function() {c.nextprev(k);}, 500)

...

  nextprev: function(k) {

if (k === 1) return "prev()";
if (k === 5) return "next()";

}

任何帮助或指导将不胜感激!

4

1 回答 1

0

试试这个,感觉不是100%正确,但介绍了一些你似乎需要的技术:

c.nextprev 立即执行并返回一个函数,该函数将执行真正需要的操作,将 c 和 k 捕获为闭包......

c.nextprev = function(k){ 
  return function(){
// I feel like prev and next might be backwards... think about that
    if (k === 1) c.prev();  
    if (k === 5) c.next();
// do nothing if k not 1 nor 5
 }
};

c.timer = window.setTimeout(c.nextprev(k), 500);

...或者也许只是在没有前面所有代码的情况下这样做......

这里 bind 将“this”设置回 c。

setTimeout( (k === 5)? c.next.bind(c): ((k === 1)? c.prev.bind(c): function(){} ) );
于 2013-08-09T23:40:54.203 回答