Autor Zpráva
MilanUhrak
Profil *
Zdravím,
pokouším se vytvořit v JS okýnko, které by šlo přesunout a zavřít. Nejsem přes JS expert, a tak bych to chtěl udělat čistě (nebo skoro čistě ) v JS, žádně jquery a podobně.

vytvořil jsem třídu MyWin, která vytvoří div, pruh s titulkem atd, takové okno, co vypadá jako v operačním systému.

Nevařil jsem z vody, inspiraci mi poskyt starší web
http://javascripthowtos.blogspot.cz/2009/02/javascript-movable-custom-popuphint_28.html

Právě ta zastaralost způsobuje problém.

Takže MyWin vytvoří div s obsahem, a části obsahu přiřadí reakci na událost - nad "titulkem" onmousedown - spustí funkci, která umožní přesun celého divu s obsahem. Můj inspirátor použil
t.onmousedown = methodize(this.startMove, this);
problém je, že funkci methodize nezveřejnil, byla jen ke stažení a dnes již není, google (nebo já) nenašel. Funkce jakýmsi způsobem přinutila, aby onmousedown odeslal nikoliv "this" jako div, ale jako objekt ( instanci třídy MyWin) , která div "stvořila". V této instanci si pak ukládá stav a pozici divu .. no mně se toto žádným náhradním způsobem nepovedlo.
this.header.onmousedown        = this.startMove( this) ;
funguje, ale "this" se ve volané funkci tváří jako DIV, nikoli jako instance MyWin. I tento zoufalý pokus
this.header.onmousedown        = function() {return this.startMove( this); } ;
síce zavolá správnou funkci, ale když se odkážu na this, mám tam ten div. Takže žádný this.moved ( vlasttnost MyWin ) v tomto kontextu neexistuje.

Neznáte nějaký způsob, jak v té události předat vlastní parametr volané funkci, případně jiné lehkotonážní řešení oken?

předem díky
Radek9
Profil
MilanUhrak:
Pokud nepotřebuješ uvnitř použít this nebo ti stačí fixně ukotvené na this.header, dá se použít bind:
this.startMove.bind(this.header, this)
Chamurappi
Profil
Reaguji na Radka9:
Zapomněl jsi doplnit, že bind nefunguje nativně ve všech používaných prohlížečích.

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