上記のブライアンのすばらしい答えを参考にして、いくつかの変更を加えました。minCurr が実際にオフセットよりも小さい場合、彼のソリューションにはバグがありました (マイナスになることもあります)。彼の解決策は、5 個が表示され、オフセットが 2 の 8 個以上のサムネイルで機能しました。ただし、5 個が表示され、オフセットが 2 のサムネイルが 6 個しかないため、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;
}