onentervr-Event über die API registrieren

  • Leider kann ich keine Callbacks richtig registrieren, die aufgerufen werden, wenn das Panorama in den VR-Modus geschaltet wird.
    So versuche ich es:

    Was allerdings funktioniert ist folgendes:

    Code
    krpano.set('webvr.onentervr', 'js(alert(42));');

    Zumindest das events.onloadcomplete-Event lässt sich aber auch direkt registrieren, statt über den String-Umweg. BTW: Wieso überhaupt diese String-Sytnax?
    Diese Lösung hat jedenfalls den Nachteil, dass ich keine Funktion registrieren kann, die in meinem Context läuft. Ich habe zwar eine Lösung gefunden, die technisch funktioniert, aber schön ist sie eigentlich nicht:

    Code
    var onEnterVrFuncName = 'krpanoWebVrOnEnterVr' + Math.random().toString(36).substr(2);
    window[onEnterVrFuncName] = function() {
    	alert(42);
    }.bind(this);
    krpano.set('webvr.onentervr', 'js(' + onEnterVrFuncName + '());');
  • Ja, das entspricht ja quasi meiner Lösung. Ich habe halt die Schwierigkeit, dass meine Callbacks an einen "Klassen-"Context gebunden werden müssen, daher muss ich das dann so umständlich formulieren.

  • Hier als Klasse:

    Und falls du dich komplett in HTML bewegst: https://krpano.com/docu/xml/#action.js

  • Das reicht für mich auch nicht, weil mein Callback ja normalerweise in einem Objekt steckt auf das man aus dem krpano-Context nicht zugreifen kann. Ich habe sozusagen nur

    Code
    new klasse();


    und nicht

    Code
    g_klasse= new klasse();


    Deswegen habe ich dann wiederum den Callback selber unter einem zufälligen Namen (wegen mehrerer Instanzen) am globalen window-Objekt gespeichert.
    Was mich ja aber wundert ist, dass dieser Umweg überhaupt nötig ist und ich nicht einfach die Funktion direkt übergeben kann, wie das mit den anderen Events ja auch funktioniert.

  • Du machst doch in deinen Codebeispielen exakt dasselbe wie ich in meinem ersten Beispiel. Nur dass deine Beispiele nicht vollständig funktionieren. Spätestens mit einer zweiten Instanz. Dann wird g_klasse wieder überschrieben und das erwartete Event kommt nicht an. Deswegen meine Lösung im ersten Posting.

    Mir gehts auch gar nicht um eine bessere Lösung in meinem Einflußbereich. Die ist schon richtig und ordentlich so. Mir gehts eigentlich nur um die Frage wieso ich bei diesem Event keinen Callback direkt angeben kann, wie bei den anderen Events auch. Ich vermute mal es handelt sich um einen Fehler.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!