Autor | Zpráva | ||
---|---|---|---|
suvel Profil |
#1 · Zasláno: 15. 10. 2016, 06:55:12
Zdravím.
Modelový příklad: Po kliknutí na div se zvětší jeho výška a tím i velikost okna - onresize ale nezareaguje. Nemůžu přijít na to, proč. Poradí mi prosím někdo? Dík. <div style="width:100px;height:500px;border:1px solid red;" onclick="this.style.height=2000+'px'"></div> <script> function fce() { alert("zvetseno!"); } window.onresize = fce(); </script> |
||
pcmanik Profil |
suvel:
document.getElementById('mojDiv').onresize = fce; window.resize reaguje na zmenu na veľkosť okna (fyzicky zmeníš veľkosť samotnej aplikácie) a nie obsahu vo vnútri. Prečo to vlastne dávaš do onresize a nie do onclick kde vykonávaš zmenu veľkosti? |
||
suvel Profil |
#3 · Zasláno: 15. 10. 2016, 09:33:57
pcmanik:
document.getElementById('mojDiv').onresize = fce; Prečo to vlastne dávaš do onresize a nie do onclick kde vykonávaš zmenu veľkosti? Div se mění dynamicky, to neovlivním. Ale spolu s výškou divu se změní (is resized) velikost okna. Tak jak tuhle událost odchytím? |
||
_es Profil |
#4 · Zasláno: 15. 10. 2016, 10:08:28
suvel:
„Ale spolu s výškou divu se změní (is resized) velikost okna.“ Čo myslíš pod „oknom“? Okno celého prehliadača, či niečo iné? V mnohých prehliadačoch, prípadne pri zmene ich nastavenia, nemusí fungovať menenie veľkosti okna. „Div se mění dynamicky, to neovlivním.“ Veď si ale písal: „Po kliknutí na div se zvětší jeho výška a tím i velikost okna“´Takže predsa môžeš všetko „vybaviť“ v rámci udalosti kliknutia. |
||
suvel Profil |
#5 · Zasláno: 15. 10. 2016, 10:33:04
_es:
Ten script je jen modelový příklad. Ve skutečnosti se výška divu mění dynamicky a já potřebuju tu změnu výšky nějak odchytit, abych ji následně mohl zjistit. A nevím jak... Přece snad nějaká událost proběhne? |
||
pcmanik Profil |
#6 · Zasláno: 15. 10. 2016, 10:43:39
suvel:
Ten skript čo "dynamicky" mení veľkosť toho divu sa nedá upraviť? A dopísať tam čo chceš spraviť? Resp. zavolať ďalšiu funkciu? |
||
suvel Profil |
pcmanik:
Ne. Obsah divu posílá jako výsledek jiný web a já předem nevím, jak dlouhý text přijde. Opravdu potřebuju odchytit nějakou událost. |
||
Keeehi Profil |
#8 · Zasláno: 15. 10. 2016, 11:14:41
suvel:
A co událost přijetí toho odeslaného textu? |
||
suvel Profil |
#9 · Zasláno: 15. 10. 2016, 11:21:36
Keeehi:
„A co událost přijetí toho odeslaného textu?“ Jaká? Nějak mi nenapadá, k jaké události kromě teoretického onresize , které nefunguje, může dojít...
|
||
pcmanik Profil |
#10 · Zasláno: 15. 10. 2016, 11:43:29
suvel:
Veď ako získavaš tie dáta z iného webu? Cez ajax nie? Tak je tam callback ktorým tie dáta vložíš na web, tak v tom callbacku vykonaj to čo chceš. |
||
suvel Profil |
pcmanik:
Ne. Je to takhle: Do mojí stránky se načte z cizího webu js funkce, která z něj vloží text do mého divu: <div id="ext_data"></div> <script async="" src="https://www.adresa_webu/main.js" type="text/javascript"></script> Tak to prostě je a já na to nemám vliv. Ale dojde k tomu, že je po načtení různá výška divu. Ještě doplňuji: Nemůžu použít onload , protože do divu se to načte až potom - jinak by bylo jednoduché zjistit výšku elementu a bylo by to. A nemůžu se zjištěním výšky ani čekat, protože je to pokaždé za jinak dlouho.
Takže: Tím, že se po načtení změní výška divu, se něco stane. A ta změna by snad měla jít nějak odchytit. |
||
pcmanik Profil |
suvel:
Nie zrovna najkrajšie riešenie, ale malo by fungovať. DOMSubtreeModified je deprecated, ale fungovať by malo stále. Možná náhrada je MutationObserver, len to zas nemá podporu pre IE10. $('#ext_data').on('DOMSubtreeModified propertychange', function() { ... }); |
||
_es Profil |
#13 · Zasláno: 15. 10. 2016, 13:45:11
suvel:
Asi by bolo vhodné nerobiť okolo toho také tajnosti, dať dostatočné informácie, a nemiasť tých, čo by ti chceli poradiť nejakými neexistujúcimi kliknutiami a pod. Tak sa teda na niečo kliká, či ide o <script> v HTML kóde? Na základe čoho ten cudzí skript pozná „tvoj div“? Ide o nejaký reklamný systém, či o čo?
|
||
suvel Profil |
_es
Žádné tajnosti, celé je to v #11. Při načtení stránky se načte externí js funkce, která do <div id="ext_data"> (innerHTML) uloží nějaký text, ale ten právě může být různě dlouhý a podle toho má pak ten div výšku. Žádné klikání. Myslel jsem, že změna rozměrů elementu vyvolá nějakou událost a já budu moct zjistit aktuální výšku toho divu. Toť vše. Jestli ta změna rozměru nevyvolá žádnou událost, budu se s tím muset smířit.
Uznávám, že v #1 je blbý příklad. pcmanik: Sláva, funguje, docela mám chuť zjistit v knihovně jquery, jak to mají udělané, vždyť je to přece javascript :-) Díky. |
||
pcmanik Profil |
suvel:
Och prepáč myslel som si, že tu jQuery bolo spomenuté. Tak potom v "čistom" JavaScripte by to bolo takto: document.addEventListener("DOMSubtreeModified", fce); // IE < 9 document.attachEvent("propertychange", fce); |
||
_es Profil |
#16 · Zasláno: 15. 10. 2016, 22:01:11
suvel:
„Žádné tajnosti, celé je to v #11.“ No to teda naozaj nie je „celé“, podstatné je predsa to, čo je v https://www.adresa_webu/main.js . To si asi nikto okrem teba nevyveští. Okrem toho sa vyjadruješ zmätočne. „Načítanie funkcie“ žiadne efekty so stránkou nespraví, môže to spraviť až zavolanie tej funkcie. Tá sa volá kde? V kóde v https://www.adresa_webu/main.js , či inde? Ak sa nevolá z cudzieho skriptu, tak žiadne špeciálne udalosti nepotrebuješ.
„Sláva, funguje, docela mám chuť zjistit v knihovně jquery, jak to mají udělané, vždyť je to přece javascript :-)“ Nebol by som si až tak istý, či to funguje vo všetkých prehliadačoch. |
||
pcmanik Profil |
_es:
„Nebol by som si až tak istý, či to funguje vo všetkých prehliadačoch.“ DOMSubtreeModified - funguje vo všetkých prehliadačoch a IE9+ propertychange - je pre IE < 9 Pričom stará opera - tá ktoré nepoužíva WebKit jadro, zrejme nemá podporu pre nič. Ale to bude naozaj mizivé promile používateľo. |
||
_es Profil |
#18 · Zasláno: 15. 10. 2016, 22:45:16
pcmanik:
„propertychange - je pre IE < 9“ V IE8 to akosi nefunguje. |
||
suvel Profil |
#19 · Zasláno: 15. 10. 2016, 22:49:26
pcmanik:
OK, dík, je to jedno :-) Chodí to v Mozille, Chromu, Edge i IE. |
||
Časová prodleva: 8 let
|
0