我在上面采纳了 Bryan 的精彩回答并进行了一些更改。如果 minCurr 实际上小于偏移量(有时甚至变为负数),他的解决方案就会出现错误。他的解决方案适用于 8 个以上的缩略图,其中 5 个可见且偏移量为 2。但是我只有 6 个缩略图,其中 5 个可见且偏移量为 2,因此 minCurr = 6 - (5 + 2) = -1 如果我有 7 个缩略图5 可见且偏移量为 2 minCurr = 1 并且存在相同的问题。
解决方法是改变
var minCurr = opts.slideCount - (opts.carouselVisible + offset);
至
var minCurr = opts.slideCount - (opts.carouselVisible + offset);
if(minCurr < offset ){
var minCurr = offset;
}
完成此操作后,我还必须针对您在结束开始附近的偏移量上向前或向后单击并且轮播移动太远的情况进行一些其他调整。
我编辑的代码现在看起来像这样:
var offset = 2; //Number of slides to offset
// handle all the edge cases for wrapping & non-wrapping
if ( opts.allowWrap === false ) {
fwd = hops > 0;
var currSlide = opts._currSlide;
var maxCurr = opts.slideCount - (opts.carouselVisible - offset);
var minCurr = opts.slideCount - (opts.carouselVisible + offset);
if(minCurr < offset){
minCurr = offset;
}
if(fwd){ // MOVING FORWARDS
if ( opts.nextSlide > maxCurr && currSlide == maxCurr|| opts.nextSlide <= minCurr ) {
hops = 0;
}
else if (opts.currSlide < minCurr && opts.nextSlide > maxCurr || opts.nextSlide > maxCurr){
hops += opts.currSlide - maxCurr;
}
else if (opts.currSlide < minCurr && opts.nextSlide > minCurr){
hops = opts.nextSlide - minCurr;
}
else {
currSlide = opts.currSlide;
}
} else { // MOVING BACKWARDS
if ( opts.currSlide > maxCurr && opts.nextSlide > maxCurr || opts.currSlide <= minCurr ) {
hops = 0;
}
else if (hops < -offset && opts.nextSlide < minCurr){
hops = opts.nextSlide;
}
else if ( opts.currSlide > maxCurr) {
hops += opts.currSlide - maxCurr;
}
else if (opts.nextSlide < minCurr){
hops = opts.nextSlide - minCurr;
}
else {
currSlide = opts.currSlide;
}
}
moveBy = this.getScroll( opts, vert, currSlide, hops );
opts.API.opts()._currSlide = opts.nextSlide > maxCurr ? maxCurr : opts.nextSlide;
}