diff --git a/changelog.txt b/changelog.txt index e8bbdbe6..1f0d10b6 100644 --- a/changelog.txt +++ b/changelog.txt @@ -12,6 +12,7 @@ OPENSEADRAGON CHANGELOG * Better requestAnimationFrame detection on older Firefox (#103) * More efficient navigator loading (#115) * Sometimes tiles wouldn't resolve if you used the blendTime option; fixed. (#95) +* You can now choose to have previous and next buttons wrap using the config.navPrevNextWrap. 0.9.127: diff --git a/src/openseadragon.js b/src/openseadragon.js index 83f417fa..ee5e0dac 100644 --- a/src/openseadragon.js +++ b/src/openseadragon.js @@ -251,6 +251,11 @@ * these paths, prefer setting the option.prefixUrl rather than overriding * every image path directly through this setting. * + * @param {Boolean} [options.navPrevNextWrap=false] + * If the 'previous' button will wrap to the last image when viewing the first + * image and if the 'next' button will wrap to the first image when viewing + * the last image. + * * @returns {OpenSeadragon.Viewer} */ window.OpenSeadragon = window.OpenSeadragon || function( options ){ @@ -588,6 +593,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){ DOWN: 'next_pressed.png' } }, + navPrevNextWrap: false, //DEVELOPER SETTINGS debugMode: false, diff --git a/src/viewer.js b/src/viewer.js index 233c245e..84588565 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -345,6 +345,10 @@ $.Viewer = function( options ) { beginControlsAutoHide( _this ); } ); // initial fade out + if(this.navPrevNextWrap){ + this.previousButton.enable(); + } + }; $.extend( $.Viewer.prototype, $.EventHandler.prototype, $.ControlDock.prototype, { @@ -1021,7 +1025,9 @@ $.extend( $.Viewer.prototype, $.EventHandler.prototype, $.ControlDock.prototype, if( this.nextButton ){ if( ( this.tileSources.length - 1 ) === page ){ //Disable next button - this.nextButton.disable(); + if(!this.navPrevNextWrap){ + this.nextButton.disable(); + } } else { this.nextButton.enable(); } @@ -1031,7 +1037,9 @@ $.extend( $.Viewer.prototype, $.EventHandler.prototype, $.ControlDock.prototype, //Enable previous button this.previousButton.enable(); } else { - this.previousButton.disable(); + if(!this.navPrevNextWrap){ + this.previousButton.disable(); + } } } @@ -1624,12 +1632,18 @@ function onFullPage() { function onPrevious(){ var previous = THIS[ this.hash ].sequence - 1; + if(this.navPrevNextWrap && previous < 0){ + previous += this.tileSources.length; + } this.goToPage( previous ); } function onNext(){ var next = THIS[ this.hash ].sequence + 1; + if(this.navPrevNextWrap && next >= this.tileSources.length){ + next = 0; + } this.goToPage( next ); }