Autor Zpráva
quatzael
Profil
Chci udělat vlastní nastylované dialogové okno, viz. Jak vytvořit vlastní dialogové okno? a potřeboval bych docílit toho, aby při tom nemohl uživatel scrollovat. Tedy, aby tam posuvníky zůstaly tak jak jsou, jen prostě aby nefungovalo tlačítko scroll a samozřejmě taky, aby to uživatel nemohl posouvat klikáním na ty posuvníky..
margin
Profil *
Podle mne zmíněné scrollování stránky ničemu nevadí. Proč s ním máš takový problém, že ho chceš znemožnit?
quatzael
Profil
margin:
Chci aby se to chovalo přesně jako dialogové okno..
Str4wberry
Profil
Zabránit rolování by mohlo jít jednoduše pomocí overflow: hidden. Není to elegantně napsané, ale pro představu by to mohlo fungovat takto. Ale zmizí ten posuvník, což nechcete.

Další možnost je potom všelijak stornovat akce, které mohou rolování vyvolat (jako onmousewheel, onkeydown u šipek a dalších kláves atd.). Taktéž by asi šlo při window.onscroll nastavovat scrollTop na pořád stejnou hodnotu, ale zřejmě to bude poskakovat.
margin
Profil *
Ptal jsem se, proč scrollování vadí, odpověď jsem nedostal, ale nestačilo by, kdyby dialogové okno mělo fixní pozici? Na to stačí jedna CSS delarace.
quatzael
Profil
margin:
Ptal jsem se, proč scrollování vadí, odpověď jsem nedostal
Já jsem psal, že jsem chtěl, aby to vypadalo jako dialogové okno. A u něj se scrollovat nedá..

Asi si teda budu muset vystačit s tím fixovaným elementem..


margin:
Taktéž by asi šlo při window.onscroll nastavovat scrollTop na pořád stejnou hodnotu, ale zřejmě to bude poskakovat.

No asi by to poskakovalo jenom u Opery. Něco podobnýho jsem už dělal a u IE, Chromu a Mozilly je to úplně ok.
Sir Tom
Profil
quatzael:
Udělej to přes to position: fixed. Nic lepšího se stejně vymýšlet nedá...
Chamurappi
Profil
Reaguji na quatzaela:
Stornovat onscroll nestačí?

aby se to chovalo přesně jako dialogové okno
To nikdy nedocílíš. Můžeš nanejvýš napodobit chování dialogového okna v nějakém konkrétním prohlížeči, ale ne ve všech. Je pravda, že rolování stránkou znemožňují asi všechny prohlížeče, ale jinak ty dialogy vypadají všelijak, takže uživatel stejně pozná, že nekouká na standardní dialog. Jaký má smysl řešit takový detail? Uškodí uživateli, když bude moct rolovat?
margin
Profil *
Jak nad tím uvažuji, tak při overflow: hidden sice zmizí posuvníky a a stránka se většinou mírně posune, ale to by zas tolik nemuselo v tomto případě vadit. Jednak bude překrytá tmavým průsvitným DIVem (ve zjenodušené Str4wberryho ukázce není), druhak po odklepnutí dialogu se scrollbar objeví zpátky, takže to nemusí bát tolik rušivé. Stručně řečeno, děje se to skoro neprůhlednou oponou.

Chamurappi:
Uškodí uživateli, když bude moct rolovat?
Ztratí cenné milisekundy tím, že pak bude rolovat zpátky. Ale mám za to, že uživatelé, až na zanedbatelné výjimky, nebudou mít touhu scrollovat.
quatzael
Profil
Chamurappi:
Stornovat onscroll nestačí?
To by možná stačilo. Jak se to ale dělá?? Znamená to ale jen znemožnění scrollování kolečkem na myši a klikání na posuvník to nestornuje, ne?

ale jinak ty dialogy vypadají všelijak, takže uživatel stejně pozná, že nekouká na standardní dialog
Jasně, že jsem nechtěl si naprogramovat script, který by mi spouštěl naprosto stejná dialogová okna jakomají ty prohlížeče, aby uživatel nepoznal, že to není od prohlížeče. To bych tam rovnou to dialogový okno mohl dát klasicky.. Jde mi o to, abych si to sám nastyloval podle sebe..

Jaký má smysl řešit takový detail? Uškodí uživateli, když bude moct rolovat?
Já jsem myslel, že to bude jen banalita. Podle toho kolik v javascriptu existuje funkcí tak mě nenapadlo, že nepůjde udělat tohle, když to fakticky ten prohlížeč umí udělat při klasickým dialogovým oknu..


margin:
Jak nad tím uvažuji, tak při overflow: hidden sice zmizí posuvníky a a stránka se většinou mírně posune, ale to by zas tolik nemuselo v tomto případě vadit.

To docela vadí.. To už je mnohonásobně lepší je tam nechat a ať si klidně scrollujou..
Chamurappi
Profil
Reaguji na margina:
Ztratí cenné milisekundy tím, že pak bude rolovat zpátky.
Pokud se nepředpokládá, že bude obsah dialogu vyšší než jedna obrazovka, tak by dávalo smysl dialog pozicovat fixně.


Reaguji na quatzaela:
To by možná stačilo. Jak se to ale dělá??
Jako u každé jiné události.

Znamená to ale jen znemožnění scrollování kolečkem na myši a klikání na posuvník to nestornuje, ne?
Ne.

tak mě nenapadlo, že nepůjde udělat tohle, když to fakticky ten prohlížeč umí udělat při klasickým dialogovým oknu
Klasické modální okno umí většinou udělat přímo operační systém.
Tuhle schopnost mimochodem některé prohlížeče také zpřístupňují, viz showModalDialog. Nevím, jak je to teď s podporou…
quatzael
Profil
Chamurappi:
Jako u každé jiné události.
To právě nevím jak je to u každé jiné události. Napadá mě akorát tam hodit return false;.
Tedy takto:

$("body").scroll(function(){
  return false;
 });

Akorát, že to vůbec nefunguje. Ať scrolluju jak scrolluju, ta událost se ani nevyvolá, natož aby stornovala to scrollování..
pcmanik
Profil
quatzael:
A si si istý, že skrolluješ priamo s body? A nie s nejakým elementom? Totižto táto udalosť neprebubláva, takže sa nedá odchytiť ak ju zavesíš na rodiča.
quatzael
Profil
pcmanik

Mám tam ještě přes to ten průhlednej div a na tom fixovaný "rádoby" dialogový okno, ale nefunguje to ani když tam místo body dám div.
Tedy: $("div").scroll
pcmanik
Profil
quatzael:
Ked skúsiš toto, vypíše sa ti niečo do konzoly?

document.getElementById('id_divu').onscroll = function() {
Console.log('Skrollujem');
};


pcmanik:
Chamurappi ti mylne poradil, onscroll udalosť sa nedá zablokovať.
Na odkázanom linku aj nájdeš potrebné riešenie.
quatzael
Profil
pcmanik:
Správně to má být:

document.onscroll = function() { 
console.log('Skrollujem'); 
};

ale stejně to console.log('Skrollujem'); nic nedělá.. každopádně to document.onscroll už konečně zachytává tu událost scroll..


pcmanik:
Tohle patrně nefunguje: document.getElementById('id_divu').onscroll
V jQuery to ale jde, asi to tam je zkombinovaný s událostí hover..
pcmanik
Profil
quatzael:
Ked podľa teba console.log nič nerobí, ako vieš že zachytávaš tú udalosť?
Správne je aj to moje riešenie ide len o to, kde scrolluješ, či s celým dokumentom alebo v nejakom elemente.

Čo sa ti nepáči na fixnej pozícii, ktorá už bola poradená vyššie?
quatzael
Profil
pcmanik:
ako vieš že zachytávaš tú udalosť?
Zkusil jsem to s alertem, to fungovalo..

Čo sa ti nepáči na fixnej pozícii, ktorá už bola poradená vyššie?
Fixní pozici jsem tam už dal.. mě šlo o to, aby se to chovalo jako ten klasickej dialog, tudíž že tam nepůjde scrollovat s tím zbytkem, ale možná tam to scrollování nechám..

Teď spíš budu muset vyřešit, jak vycentrovat ten fixní div vertikálně vůči obrazovce, jestli je to vůbec nějak možný..
Sir Tom
Profil
quatzael:
Místo jakýkoliv "prasečinek" s JavaScriptem a vymýšlením, jak zablokovat skrolování je úplně nejlepší to řešení přes fixní pozicování. Sám jistě vidíš, že s řešením přes JS je velmi mnoho práce - nehledě na tom, že není zaručeno, že tento JS bude fungovat vždy. Možná by také stálo za zvážení řešení Str4wberryho, ale můžeš jej ještě modifikovat třeba tím, že na pravý okraj okna vložíš obrázek posuvníku ve formě pozadí.

jak vycentrovat ten fixní div vertikálně vůči obrazovce, jestli je to vůbec nějak možný..
Ano - to možné je...

mě šlo o to, aby se to chovalo jako ten klasickej dialog, tudíž že tam nepůjde scrollovat s tím zbytkem
Tak na klasickej dialog existuje alert();, nicméně chceš vlastní styl dialogu a nemyslím, že bude pro uživatele zvláštní, když budou mít dialog a za ním rolovací obsah.
quatzael
Profil
Sir Tom:
nicméně chceš vlastní styl dialogu a nemyslím, že bude pro uživatele zvláštní, když budou mít dialog a za ním rolovací obsah.
už jsem se rozhodl, že to udělám jen s tím fixovaným divem a scrollování bránit nebudu..

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: