我已经编写了一个小函数,它基本上将currentPosition值作为一个参数,如果该数字等于幻灯片的总数,并且如果它不是将值加1,遗憾的是,虽然我的增量数字似乎永远不会移动来自1.任何人都可以告诉我哪里可能出错了吗?
var currentPosition = 0;
var slideWidth = 320;
var numberOfSlides = sliderSlides.children.length;
console.log('Number of slides = ', numberOfSlides);
//Remove scrollbar in js
sliderCtn.style.overflow = 'hidden';
//Set .slides width equal to total width of all slides
sliderSlides.style.width = slideWidth * numberOfSlides + 'px';
// Direction click handlers
sliderDirNext[det.clickEvent] = function(e) {
next(currentPosition);
sliderSlides.style.left = slideWidth*(-currentPosition) + 'px';
console.log('Slide width ', slideWidth);
stopEvent(e);
};
function next(currentPosition){
if( currentPosition === numberOfSlides ) {
return false;
} else {
currentPosition += 1;
console.log('Next current position = ', currentPosition);
return true;
}
}
答案 0 :(得分:5)
解。 但是,如果您提供更多上下文 ,则最有可能更好一个:
window.currentPosition = 0;
function next(){
if( currentPosition === numberOfSlides ) {
return false;
} else {
currentPosition += 1;
console.log('Next current position = ', currentPosition);
return true;
}
}
OP更新后:
只需删除next
函数currentPosition
参数即可解决您的问题,因为其他逻辑是合理的。
答案 1 :(得分:1)
参数的值永远不会在函数之外递增,因为基元是按值传递的,而不是通过引用传递的。
要解决您的问题,您可以让函数返回一个布尔值,并在函数返回true时递增值:
if (next(currentPosition))
++currentPosition;
或者你可以摆脱这个功能,只需将代码内联。
答案 2 :(得分:1)
您只是递增变量的本地副本(在函数范围内)。因此,对next
的下一次调用会获取原始变量的新副本并重新开始。
要拥有一个真正的计数器,你可以引入一个全局变量(可能在某个命名空间内),然后在函数中修改它,比如
var slider = {
curPos: 0,
next: function() {
if( this.curPos === numberOfSlides ) {
return false;
} else {
this.curPos += 1;
console.log('Next current position = ', this.curPos );
return true;
}
}
}
另一种可能性是使用闭包。
function getCounter() {
var curPos = 1;
return function() {
if( curPos === numberOfSlides ) {
return false;
} else {
curPos += 1;
console.log('Next current position = ', curPos );
return true;
}
};
}
var next = getCounter();
next();