我在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()";
}
任何帮助或指南都将不胜感激!
答案 0 :(得分: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(){} ) );