Dynamisch "ondown.touch"- oder "ondown.no-touch"-Event einem Layer hinzufügen. [solved]

  • Hallo an alle ... und hier mein Problem:
    Ich habe z.B. einen Layer mit definierten Events wie onover, ounout, ...

    Code
    <layer name="meinLayer" url="bildname.jpg" align="center" scale="1.0" x="0" y="0"
                 onover="OnOverAction();"
                  onout="OnOutAction();"
           ondown.touch="OnDownDeviceTouchAction();"
        ondown.no-touch="OnDownDeviceNoTouchAction();"
    />

    ... über die entsprechenden Events werden die Aktionen ausgeführt, alles funktioniert prima!
    ... Die Events des Layers können dynamisch neu gesetzt oder überschreiben werden ...

    Code
    set( layer[meinLayer].onclick , OnClickAction(); );

    ... oder ...

    Code
    set( layer[meinLayer].onover , AndereOnOverAction(); );

    ... auch hier: alles funktioniert prima!
    ... was jedoch, wenn es sich um Events wie ondown.touch oder ondown.no-touch handelt?
    ... Jedenfalls gehen ...

    Code
    set( layer[meinLayer].ondown.touch , NeueOnDownDeviceTouchAction(); );

    ... oder ...

    Code
    set( layer[meinLayer].ondown.no-touch , NeueOnDownDeviceNoTouchAction(); );

    ... nicht!
    Hat jemand eine Lösung wie man dynamisch z.B. einen "ondown.no-touch"-Event setzt?
    Jedenfalls Daumen hoch für krpano und die tolle Community! *smile*
    Don

    Edited 4 times, last by Don Gamba (May 10, 2019 at 12:51 PM).

  • Hi,

    mein deutsch ist nicht so gut, bin leider nur Holländer, aber hier ist eine liste mit 'devices'.
    https://krpano.com/docu/actions/#device.touch

    In deine beispiel musst du es so machen denke ich:

    Code
    if(device.touch, 
       set(layer[meinLayer].ondown, NeueOnDownDeviceTouchAction());
    ,  
       set(layer[meinLayer].ondown, NeueOnDownDeviceNoTouchAction()); 
    );

    unsw...

    Hoffentlich hilft das ein wenig.
    Tuur *thumbsup*

  • dazu gabs vor kurzem schon nen thread

    alles was nach dem attribut (ondown) kommt, ist ein devicecheck!
    siehe hier: https://krpano.com/docu/xml/#devicechecksforattributes

    gesetzt wird ondown bei der xml evaluation je nachdem ob touch, oder no-touch zutrifft.
    bzw es gibt im evaluierten xml keinen ondown.touch wert mehr, nur ondown.

    dynamisch musst du das dann so machen wie tuur geschrieben hat

    ps. guter nick/user pic *g*

  • Hallo Tuur,
    Dein Deutsch ist super und 1000 Dank für die schnelle Antwort!
    Deine Lösung scheint auch mir nach diversen Versuchen die einzige Möglichkeit zu sein. *whistling*
    Das macht im Code alles minimal umständlicher, aber Hauptsache es funktioniert! *smile*
    Grüße, Don

    ! PROBLEM SOLVED ! ... Hier also die Lösung mit set(layer[... :

    Code
    set( layer[MyLayer].onover , "if ( device.touch , trace('OnOverTouch');      	 , trace('OnOverNoTouch');         );" );
    set( layer[MyLayer].onout  , "if ( device.touch , trace('OnOutTouch');           , trace('OnOutNoTouch');          );" );
    set( layer[MyLayer].ondown , "if ( device.touch , OnDown_DeviceIsTouch_Action(); , OnDown_DeviceNotTouch_Action(); );" );
  • Hallo indexofrefraction,
    auch Dir herzlichen Dank für die rasche Antwort.
    Dass es zu diesem Thema vor kurzen einen Thread gab - Sorry! - habe ich verpennt.
    Ich denke, ich verstehe, was Du meinst.
    Beim der genannten "XML Evaluation" wird z.B ...
    onover.touch="TouchToDo();" und onover.no-touch="NoTouchToDo();"
    ... von der Logik in etwas umgewandelt wie ...
    onover="if( device.touch , TouchToDo(); , NoTouchToDo(); );"

    Anstelle von onover.touch und onover.no-touch (existieren nach XML Evaluation nicht mehr)
    gibt es nun nur noch das universelle onover mit integrierter Falluntescheidung für touch/no-touch.

    Folglich werden bei der "XML Evaluation" die "Dinge" nach ähnlichem/gleichem Prinzip eingerichtet,
    wie auch wir sie im Nachhinein über set(layer[... ansprechen und einrichten/ändern müssen.

    ps. zu meinem Nick ... Man ist was man isst! ... ich liebe Garnelen etc. *g*
    Grüße, Don

  • Hallo indexofrefraction,

    Quote

    if ( device.touch , set( layer[MyLayer].onover, "'OnOverTouch()"); , set( layer[MyLayer].onover, "'OnOverNoTouch()"); );
    calc(layer[MyLayer].onover, device.touch ? "'OnOverTouch()" : "'OnOverNoTouch()" );

    Ja, verbessert die Performance! *thumbsup*

  • ! PROBLEM SOLVED ! ... Bessere Performance! ...
    device.touch Unterscheidung wird direkt beim "Setzen" ( set(layer[... ) gemacht und muss später nicht bei jedem onover, onout, etc. wiederholt werden.

    set-Version:

    Code
    set( layer[MyLayer].onover  , if ( device.touch , "trace('OnOverTouch');"          , "trace('OnOverNoTouch');"         ); );
    set( layer[MyLayer].onout   , if ( device.touch , "trace('OnOutTouch');"       	   , "trace('OnOutNoTouch');"          ); );
    set( layer[MyLayer].ondown  , if ( device.touch , "OnDown_DeviceIsTouch_Action();" , "OnDown_DeviceNotTouch_Action();" ); );


    calc-Version:

    Code
    calc( layer[MyLayer].onover , device.touch ? "trace('OnOverTouch');"          : "trace('OnOverNoTouch');"         ); 
    calc( layer[MyLayer].onout  , device.touch ? "trace('OnOutTouch');"           : "trace('OnOutNoTouch');"          );
    calc( layer[MyLayer].ondown , device.touch ? "OnDown_DeviceIsTouch_Action();" : "OnDown_DeviceNotTouch_Action();" );

    Edited 2 times, last by Don Gamba (May 15, 2019 at 6:56 PM).

Participate now!

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