Search code examples
javascriptevent-handlingopenseadragon

openseadragon add click event nextButton previousButton


I would like to add a click EventListener to the nextButton and previousButton and get the current image (doing it via viewer.source.getTileUrl()).

However, I am receiving TypeError: viewer.source is null. But it works with getUrlBtn.addEventListener("click"[...]

What did I do wrong with the addHandler click event on the buttons?

var viewer = OpenSeadragon({
  crossOriginPolicy: 'Anonymous',
  visibilityRatio: 1.0,
  showRotationControl: true,
  defaultZoomLevel: 1.0,
  minZoomImageRatio: 0.4,
  id: "osd-container",
  tileSources: ["images/T/1.dzi", "images/T/2.dzi", "images/T/3.dzi", "images/T/4.dzi"],
  sequenceMode: true,
  showReferenceStrip: false,
});

//works
var getUrlBtn = document.getElementById("getUrl");
getUrlBtn.addEventListener("click",function(e){
    console.log("getUrl: " + viewer.source.getTileUrl());
    currentFol.innerHTML = viewer.source.getTileUrl();
});

//TypeError: viewer.source is null
viewer.nextButton.addHandler("click",function(e){
    console.log("nextButton");
    currentFol.innerHTML = viewer.source.getTileUrl();
});
//TypeError: viewer.source is null
viewer.previousButton.addHandler("click",function(e){
    console.log("previousButton");
    currentFol.innerHTML = viewer.source.getTileUrl();
})

//I also tried but same error as above
viewer.nextButton.tracker.clickHandler = updateFol;
viewer.previousButton.tracker.clickHandler = updateFol;

var currentFol = document.getElementById("currentFol");
function updateFol(){
  console.log("next/previousButton");
  currentFol.innerHTML = viewer.source.getTileUrl();
}
<button id="getUrl">get current url</button>

<p><span id="currentFol"></span></p>


Solution

  • Probably the best approach is to just listen to the "page" events:

    viewer.addHandler('page', updateFol);
    

    Does that work?