Autor Zpráva
user243
Profil
hoj,
mám problém s ovládáním galerie a shadowboxu pomocí šipek klávesnice; původně byl v galerii jen shadowbox a mezi jednotlivými screeny šlo lehce šipkami přepínat šipkami, později mě napadlo přidat přepínání šipkami i mezi jednotlivými stránkami; k tomu jsem použil skript od Chamurappiho, který jsem si pro sebe upravil:
/* ovládání galerie */
//function ovladani_galerie() {
// jakpsatweb
document.documentElement.onkeydown = function(e)
{
  var event = e || window.event;
  var target = event.target || event.srcElement;
  if(/*target.tagName == "img" && */document.getElementById("galerie") == null) return true; /* nvm proč, ale funguje to s rovností*/
  var akce = {
    37: function() {window.location=document.getElementById('zpet').href;},
   /* 38: function() { … akce při šipce nahoru … },*/
    39: function() {window.location=document.getElementById('dalsi').href;}
   /* 40: function() { … akce při šipce dolu … }*/
  };
  var a = akce[event.keyCode];
  return a ? a() : true;
}
//}
skript funguje, problém je v tom, že když mám přes shadowbox otevřený nějaký screen a chci pomocí šipky přejít na další, tak dojde k přesměrování na další/předchozí stránku galerie; zkoušel jsem měnit podmínky s rovností, nerovnosti i bez ní, přidat podmínku na element, který shadowbox vytvoří, ale vše bez úspěchu; skript mám na stránce http://fireopals-memoriae.xtreemhost.com/
předem děkuji za nápady;
Keeehi
Profil
if ( document.getElementById("sb-overlay").style.opacity == 0 ||  document.getElementById("sb-overlay").style.opacity == "") {
    // shadowbox je zavřený
}
else {
   // shadowbox je otevřený
}
user243
Profil
funguje, děkuji moc;
Chamurappi
Profil
Reaguji na usera243:
Ve všech prohlížečích? Pochybuji.

if(/*target.tagName == "img" && */document.getElementById("galerie") == null) return true;
Z jakého důvodu jsi nahradil podmínku, že když je kurzor ve formulářovém prvku, že se nemají chytat šipky, za tuhle podmínku, která říká, že se nemají chytat klávesy, pokud je ve stránce element s id="galerie"?
user243
Profil
drobet jsem přestřelil, nefunguje v ie, ale v chrome, opeře a ff ano; podmínku jsem vyměnil, protože nevyplňuji žádný formulář, ale potřebuji testovat šipky, když jsem na stránce s galerií; původně jsem měl v podmínce nerovnost, ale nefungovalo to, jak mám napsané v poznámce, funguje to s rovností; potom jsem testoval hodnotu pomocí:
<script>
test = document.getElementById('galerie');
document.write(test);
</script>
když jsem script vložil před prvkem, hodnota byla null, myslel jsem, že js se spouští až po načtení html a tak by pořadí nemělo mít vliv;
víte, co mám špatně, aby to fungovalo i v ie?
Keeehi
Profil
user243:
Ne, JS se spouští tam, kde je napsaný. Aby se spustil až po načtení stránky, musel by reagovat třeba na událost onload u body.
user243
Profil
opacity zná ie jen přes filtr, ale díky za nakopnutí; výsledný funkční kód:
/* ovládání galerie */
// https://gist.github.com/1771618
 function getUrlVar(key){
    var result = new RegExp(key + "=([^&]*)", "i").exec(window.location.search); 
    return result && unescape(result[1]) || ""; 
}
// jakpsatweb
document.documentElement.onkeydown = function(e)
{
  var event = e || window.event;
  var target = event.target || event.srcElement;
  var id = getUrlVar("id");
  if ( document.getElementById("sb-container").style.display == "none" || document.getElementById("sb-container").style.display == "") {
      if (id == "galerie") {
          if(target.tagName == "img")  return true; 
          var akce = {
          37: function() {window.location=document.getElementById('zpet').href;},
          /* 38: function() { … akce při šipce nahoru … },*/
          39: function() {window.location=document.getElementById('dalsi').href;}
          /* 40: function() { … akce při šipce dolu … }*/
              };
          var a = akce[event.keyCode];
          return a ? a() : true;
          };
      };
}
díky všem

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: