Návrh pro pohyb v menu
Hezký večer.
Může někdo poradit primitivní návrh, podle kterého bych mohl vypisovat položky v menu? Zasekl jsem se a nedokážu se hnout. Předem Děkuji.
Mám v poli 10 položek.
Zobrazuji vždy jenom tři položky.
Jedna položka je vždy aktuální.
Pokud půjdu směrem dolů, a menu bude vypadat následovně (každý jeden sloupeček se třemi řádky je jeden stisk na klávesnici)
1položka<<<
2položka
3položka
1položka
2položka<<<
3položka
1položka
2položka
3položka<<<
4položka<<<
5položka
6položka
4položka
5položka<<<
6položka
A o co ti jde ???
Jde mi o údaje které potřebuji dosadit do nějakýho cyklu. To je všechno. Jde mi o nějakou logiku. Znám počet položek v array, znám aktuální ID položky a znám maximální počet položek které se mají zobrazovat v jednom sloupci, ale nevím jak nakrmit ten loop.
První 3 sloupečky jsou jednoduchý
ale další nevím jak udělat.
Takže se jedná o PHP?
To měl být jen příklad, ale klidně v PHP.
Lepší by to bylo asi v Pythonu, viď?
Ten cyklus nebude od 0, ale od:
aktualni_id_polozky / max_polozek
Je nutné použít celočíselné dělení.
A druhý parametr?
Logicky o max_polozek víc. Případně ještě s kontrolou, jestli to nepřesáhne počet položek.
Kdyby to bylo tak jednoduché jak si myslíš, tak tady nejsem. :)
Myslel jsi tak? Pokud ano, tak fungují pouze první 4 položky, pak už se aktuální položka nevypíše, je někde dole v menu
Co je tam ten nesmysl i=b? Nechtěl jsi spíš napsat i < b?
Jo a vypadl mi tam konec:
a=(aktualni_id_polozky / max_polozek) * max_polozek
Ano mělo tam být místo znaku = znak <
Jdu to otestovat
Tak pole které má 6 položek funguje správně,
pole které má 7 položek udělá loop o 2 kroky navíc,
pole které má 8 položek udělá loop o 1 krok navíc,
pole které má 9 položek už zase funguje správně.
a tak dokola
Napadá tě jak to opravit?
Však na to už jsem upozorňoval:
Ano, to jsi psal, to jsem neudělal, opravim.. Děkuji
Pokud je počet položek v menu na výpise 3 tak je to hezké, ale jak je pouze jedna tak to vypadá, že má menu pouze jednu položku.
Je to složitější udělat to vzhledově líp?
1položka<<<
2položka
3položka
1položka
2položka<<<
3položka
1položka
2položka
3položka<<<
2položka
3položka
4položka<<<
3položka
4položka
5položka<<<
4položka
5položka
6položka<<<
Nějak v tomhle výpisu nevidím logiku.
Jako, že v tom nevidíš rozdíl nebo nerozumím jak to myslíš. A víš jak to udělat?
Myslel jsem to tak, že nerozumím podle jakého pravidla by to mělo být právě takhle. Jak bys to slovně popsal?
Tohle bych třeba chápal a bylo by to i jednoduchý to tak upravit.
Tak to je to přesně teď, což bylo původní zadání.
To ale nechci, (viz jak jsem psal), navíc se mění i samotná výška menu.
Slovně bych to popsal asi. tak, při posunování kurzoru směrem dolů pojede tak dlouho pokud dosáhne kurzor poslední pozice (dole položka č3) další krok zobrazí cyklus od +1 do +1 a kurzor zůstane na svém spodním místě a pro kroky nahoru to bude přesně zrcadlově.
Nevím ale jestli je to to, co jsi chtěl abych slovně popsal.
Takhle to teď teda není. A výška menu se rozhodně nemění.
Omlouvám se! Jasně že ne, myslel jsem, že si se uklepl s tou položkou č.7 v předposledním sloupečku. V tomto případě je to tak jak říkáš, a v tomto případě se výška opravdu nemění..
Tak by asi mohlo být, pokud víš jak na to.
Prostě do "a" nastavíš číslo o 3 menší než "b".
Nerozumím.
Teď je to takto
Pokud zadám do $a hodnotu o 3 méně jak bude v $b, tak v budou mít obě proměnné stejnou hodnotu.
Nebude, protože před tím uděláš kontrolu, aby "b" nebylo větší než počet položek.
Psal jsi, že to bude jednoduché
A to ti přijde složité?
Ano je, vůbec netuším co s výsledkem té kontroly.
To že "b" nebude větší než počet položek.
No to už jsi psal.. zjistím, že 'b' je nebo není větší než počet položek a?
A když je, tak do "b" nastavíš hodnotu rovnou počtu položek.
Tak? Vážně nevím.
Co ti brání to vyzkoušet?
No tak to dobře nemám :(
To není zrovna dokonalý popis chyby.
Těžko popsat jak se to teď chová, asi to udělat nejde. Vzdávám to, díky za pomoc.
No a nastavil jsi potom ještě "a" na správnou hodnotu?
Celý kód jsem tu napsal a žádnou správnou hodnotu jsem do 'a' nepsal jelikož ji ani neznám.
Vypíšou se jen první tři položky, čtvrtou už nevidím a následně se ztratí i ty první tři položky.
Jak máš přesně celý kód?
Jo už to vidím. V té podmínce nemá být max položek ale celkový počet položek.
Tak to vůbec nepracuje, živá ukázka tady:ZGTQ93861
https://rextester.com/DJEM99965
Díky moc. Tak problém byl pouze v tom zaokrouhlení nebo jsem něco přehlídl?
Pokud se vrátím k upravenému dotazu u kterého jsi nenašel logiku, je to opravdu složité? Jedná se o tu verzi kterou doslovně popisuje uživatel 'touchwood' Tohle funguje ale není to pěkný, když se chová poslední strana jinak než ty ostatní, hlavně směrem nahoru. Díky
Nebylo tam jenom zaokrouhlení.
Složité to není.
A poradíš ještě i s tímto jak to udělat? Díky
Budeš si udržovat informace o "okně", tj. index prvního a posledního viditelného prvku. Jakmile se posuneš s indexem za okno (tj. index současného prvku bude větší než posledního viditelného prvku), posuneš i indexy okna. Obdobně když se posuneš s indexem před okno. Samozřejmě v obou případech musíš hlídat, aby ses oknem nedostal před první nebo za poslední prvek.
Příklady:
-----------------------------------------------
Stav:
Okno je 1-3.
Posun dolů na index 3 nemění pozici okna, stejně jako nahoru na prvek 1.
-----------------------------------------------
Stav:
Okno je 1-3.
Posun dolů na index 4 změní pozici okna na 2-4. Posun nahoru na index 2 pozici okna nezmění.
-----------------------------------------------
Stav:
Okno je 2-4.
Posun dolů není možný. Posun nahoru na index 3 pozici okna nezmění.
-----------------------------------------------
Stav:
Okno je 2-4.
Posun dolů na index 3 nezmění pozici okna. Posun nahoru na index 1 změní pozici okna na 1-3.
Tak je to složité, ne že není, dokonce ještě víc než jsem si myslel. Vůbec nevím jak a co přesně mám hlídat, navíc jak s těmi daty které mám hlídat pracovat a kdy je použít.
Pro mně je to tedy tím pádem konečná. Děkuji velmi za tvou ochotu.
Vždyť je to naprosto primitivní.
Pro programátora seniora (jak jsi psal níže) určitě určitě primitivní je, ještě aby ne
Tohle by měl zvládnout i začátečník po pár týdnech učení.
Učení? Co to je? Já myslel, že doba pokročila a že stačí napsat někam na Poradnu a počkat, až to někdo za mě udělá?
Wikan obdivujem tvoju trpezlivosť,....
Jako senior programátor zodpovědný za méně zkušené kolegy to ani jinak nejde. To ovšem neznamená že nekroutím očima
a čo je problém?
starting_index = selected_index - (selected_index % separate_per) ...(7 - (7 % 3)) = 7 - 1 = 6, na indexe 6 máš začínajúcu položku tretej skupiny [0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]
následne od starting_index vypíšeš separate_per počet položiek. A na selected_index danej položky pridáš šípku.
veľmi jednoduchý algoritmus. Nie je na tom čo vymýšľať, len jedno blbé odčítanie zvyšku, získaného modulom.
Bez urážky, ale takový blábol můžeš pochopit možná jen ty.
asi pomoc nechcete, tak ďakujem za otázku, dovidenia... (a nie neurazil som sa, len zisťujem že tu trávim čas zbytočne)
btw. neviem čo nepochopíte na blbom vzorci:
starting_index = selected_index - (selected_index % separate_per)
ale, keďže neviete vyriešiť ani takýto primitívny problém, tak sa ani nedivím že nechápete.... logikou zrejme neohurujete.
Alebo ste to chceli celé vypracované a rovno kód?
Já bych použil takovéhle chování:
nějaká smyčka na čtení kláves a upravování akt.id okolo tohohle
Takhle by to melo fungovat pro libovolny pocet polozek a delku sloupce, s tim ze pokud to pujde, tak je vybrana polozka uprostred zobrazeneho intervalu
ale on simuluje chování klasického listboxu...
edit: tedy dokud není pozice mimo viditelný interval, posunuje se jen kurzor, v opačném případě kurzor stojí a posouvá se celý view nahoru nebo dolů.
čo som pochopil tak nie, ale ak by to bolo takto, tak vlastne na čo sa pýta? Však v takom prípade ani nemusí počítať index, a v podstate mu stačí vypísať predchádzajúcu, aktuálnu a nasledujúcu položku... to je úplne všetko...
to právě ne. Když pojedeš dolů a pak zmáčkneš 2x nahoru, tak se view měnit nebude, ale kurzor, který je na pozici S+2, přejde na S+1 a pak S. Teprve při dalším zmáčknutí nahoru se pozice nezmění (S) ale změní se její index z hlediska pole. A to je celá podstata problému.
no však to je čo Wikan písal, a v podstate povedal celý algoritmus.... aký je problém? Implementácia na 2 minúty.
já ale nereagoval na Wikana...
Problém je, že on nejspíš neví, co přesně chce ...
Přesně tak.
Maybe you are not singles, but your partner cannot accompany you anytime, anywhere. Or in your sex life, your partner cannot fill your vaginal or anus. In either case, your sexual needs cannot be met. That’s so sad. Now, you should try the large dildo. You can control it in any way. Constantly rubbing the clitoris. Finally enjoy the sexual pleasure brought by vaginal masturbation. In the sex life of couples, a massive dildo plays an important role in foreplay. You can buy a harness, then your huge dildo will be your strap-on dildo by any sex position. Your sex life will be different because of the participation of the huge strapon dildo.https://www.hugedildo.com/