Autor Zpráva
polom
Profil *
Jak vrátit správnou pozici kurzoru?
Mám tuto funkci:

function getPos(e,type) {
  var event = e || window.event;
  if (event.type=="mousemove"){
  Positions = {
      "clientX":(event.pageX || event.clientX),
      "clientY":(event.pageY || event.clientY),
      "screenX":(event.screenX ),
      "screenY":(event.screenY)
      }
  }
  else if (type) 
  return Positions[type]; // vrátit požadovanou vlastnost
}


Kterou volám pomocí:
getPos(e,"screenX")


Do Positions.screenX a Positions.screenY chci ukládat pozici blikajícího kurzoru (tj. místo kde se nacházím když píšu text). Pozice myši s tím nesouvisí. Když napíši text, kliknu mimo vstupní prvek a kurzor zmizí. Informace jsou uložené a teď chci vytvořit tlačítko hned vedle místa, kde jsem psal. Problém je v tom, že ty souřadnice event.screenX a event.screenY jsou dost nepřesné, takže tlačítko se vytvoří někde jinde. (Jde o formulář s několika řadami a sloupci inputů, takže se tlačítko vytvoří na nesprávném místě a v nesprávném sloupci). Dík za radu
polom
Profil *
Tak kdyby to někoho zajímalo, nakonec jsem to udělal pomocí JQuery, kde je funkce offset. Jinak jsem to zkoušel pomocí offsetu v DOM a to nejde, protože offset IE a FF počítají každý jinak. V tom JQuery to jde krásně a přesně. Docela by mě zajímalo, jak by jste to řešily vy?

Moje řešení:
function getObjPos(o,prop) {
  o=$(o).offset();
  if (prop) return o[prop];
}
Chamurappi
Profil
Reaguji na poloma:
Docela by mě zajímalo, jak by jste to řešili vy?
Tak, abych hledání pozice nepotřeboval. Pokud chci vyrobit tlačítko hned vedle textu, tak ho prostě dám do DOMu vedle textu a nebudu ho pozicovat.
Zjišťování souřadnic elementu jsem potřeboval zatím jen k tomu, abych zjistil, jestli je ve viditelné ploše, k ničemu jinému.

Jinak jsem to zkoušel pomocí offsetu v DOM a to nejde, protože offset IE a FF počítají každý jinak.
Jak jinak? Při vhodné stavbě CSS se jde rozdílům vyhnout.
polom
Profil *
Chamurappi:
Tak, abych hledání pozice nepotřeboval. Pokud chci vyrobit tlačítko hned vedle textu, tak ho prostě dám do DOMu vedle textu a nebudu ho pozicovat.
V mém případě se jedná o formulář kde je málo místa a proto jsem nechtěl tlačit nějakých 28 tlačítek někam, když stačí jedno, které se bude zobrazovat tam kde zrovna píšu. Mám to už hotové a funguje to perfektně. Tlačítko nezabírá skoro žádné místo, protože se vejde mezi dva sousedící inputy. html kód je taky výrazně kratší.
Možná takto
Profil *
<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style>
            button {
                display: none;
            }
        </style> 
        <script type="text/javascript">
            var button;
            function focusIn(input)
            {
                if (button) 
                {
                    button.style.display = "none";
                }
                button = document.getElementById(input.id + "_btn");
                button.style.display = "inline";
            }
        </script>       
    </head>
    <body>
        <form>
            <input type="text" id="input1" onfocus="focusIn(this)">
            <button type="button" id="input1_btn">Klik</button>
            <input type="text" id="input2" onfocus="focusIn(this)">
            <button type="button" id="input2_btn">Klik</button>
            <input type="text" id="input3" onfocus="focusIn(this)">
            <button type="button" id="input3_btn">Klik</button>
        </form>
    </body>
</html>

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:

0