Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Chowające się menu
WiruSSS
post 12.09.2013, 13:23:08
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

Ostrzeżenie: (0%)
-----


Witam

Na wstępie chcialbym zaznaczyć, że stworzenie tego nie nastręcza mi problemów. Bardziej nie daje mi spokoju czy aby nie robię tego jakoś naokoło, nieoptymalnie. Być może istnieje jakiś wygodniejszy nieoczywisty dla mnie sposób?

http://jsfiddle.net/WiruSSS/zPXUK/
Go to the top of the page
+Quote Post
kamil4u
post 12.09.2013, 15:22:39
Post #2





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Robisz to dobrze - tak jak się powinno. Inne uwagi:

-
Kod
menu.children().first().children().first()

Jest to nieczytelne i wolne( , jeśli kilka ms ma dlakogolwiek znaczenie ). Użyj .find() z li:first-child.

-
Kod
<li><a href="">»</a></li>

Skoro >> nie jest linkiem, nie używaj elementu <a>


--------------------
Go to the top of the page
+Quote Post
lukasz1985
post 12.09.2013, 16:06:57
Post #3





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


Ja bym nie robił takich rzeczy z definicjami zmiennych jak wymienianie ich po przecinku w sytuacji gdy przypisuje się do nich wartości z funkcji.
Coś takiego wygląda tylko wtedy, kiedy wchodzi w rachubę proste przypisanie wartości albo same deklaracje:
[JAVASCRIPT] pobierz, plaintext
  1. var zmienna, string, tekst, pole, div;
[JAVASCRIPT] pobierz, plaintext

[JAVASCRIPT] pobierz, plaintext
  1. var zmienna = 2 , string = "Witaj świecie", tekst, pole, div;
[JAVASCRIPT] pobierz, plaintext


Chociaż i tego rzadko używam bo w programowaniu obowiązuje zasada - deklaruje zmienne jak najbliżej miejsca w którym zostaną użyte.

Kolejną rzeczą, która mi się rzuca w oczy - w JS zazwyczaj nie używa się nazw obiektów z dużej litery - "SlideMenu" jest źle, powinno być "slideMenu". Duże litery są pozostawione dla klas (a w JS to się nazywa konstruktor).

Zauważ też, że "show.parent().hide()" i "show.parent().show()" wygląda idiotycznie smile.gif Może znalazłyby się lepsze nazwy dla zmiennych "show" i "hide" ?

Dla zaawansowanych: Nie chce mi się przepisywać Twojego kodu ale - funkcje anonimowe, które podajesz w $.click są na tyle rozbudowane, że możnaby im nadać osobne nazwy i odwołać sie do nich w innych polach obiektu "slideMenu", a w init zrobić tylko obiekt.click(pokaz.bind(this));

Generalnie to wszystko to są takie igraszki dla efektu. Można dzięki temu, oczywiście zbudować sobie zaplecze elementów do ponownego użytku. Spróbuj jednak wymyślić sobie jakąś większa aplikację, która zmusiłaby Cię do tworzenia modułów i używania wzorców projektowych, jeśli chcesz poznać "smak prawdziwego programowania" (nie taki fajny swoją drogą tongue.gif).
Go to the top of the page
+Quote Post
WiruSSS
post 12.09.2013, 16:45:40
Post #4





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

Ostrzeżenie: (0%)
-----


..hmm ..nie do końca się zrozumieliśmy ...to jest przykład napisany z palca do pokazania co chcę osiągnąć. Nazwy zmiennych akurat tutaj nie mają znaczenia, chodzi mi o samą konstrukcje z użyciem 2 buttonów, z których zależnie od sytuacji kolejny jest ukrywany. Bardziej chodziło mi o opinię, czy da się coś takiego uzyskać prostszą drogą (np z użyciem jakiegoś zwykłego toggle).

Obecnie piszę edytor graficzny działający w przeglądarce, więc "duże projekty" nie są mi obce smile.gif

Znam wzorce projektowe i wiem jakie są konwencje. Ale chyba to nie zmusza mnie do sztywnego trzymania się wszystkoego co ktoś tam sobie ustalił. Akurat mnie wygodniej obiekty literałowe nazywać duzymi literami (chociaz kłóci się to z ogólnie przyjętymi zasadami) ..każdy ma jakieś tam swoje przyzwyczajenia.

Co do ścieżek dostępu do drzewa, szczerze powiedziawszy nie zastanawiałem się czy szybciej zadziała find() czy może parent (chociaż akutar tutaj faktycznie wygląda to nie za ciekawie tongue.gif). Używam tego co mnie osobiście szybciej na pierwszy rzut oka zasugeruje do czego się odwołuje (a skoro takie metody są udostępnione to dlaczego ich nie uzywać?). Ale tak jak pisałem, w tym przykładzie po prostu napisałem wszystko z palca, dla pokazania samego efektu jaki chcę uzyskać. Także jesli mogę prosić o udzielenie mi porady, która ma związek z moim zapytaniem.

Dla jasności jeszcze raz napiszę: Czy da się owy efekt uzyskać w prostszy sposób (w sensie np jeden przysisk + jakieś toggle). Czy muszę rozgraniczać się do zdarzenia chowania menu osobno a do zdarzenia wysuwania menu osobno?

[edit]

..a jeszcze odnośnie var i przecinków. Tutaj chyba też jest kilka zdań na ten temat. Ja się trzymam konwencji Stoyana Stefanova. Zysk wydajności wg zasady deklaracji jak najbliżej użycia wg mnie jest na tyle znikomy, że wolę jednak bardziej czytelny dla mnie sposób, wpierw wszystko deklaruję, potem używam.

[edit]

...w "życiowym" przykładzie znaczniki a maja zarówno zawartość jak i zdefiniowany href [edit]..ok chodziło ci o przycisk ukrywający i wysuwający menu, znów nie doczytałem tongue.gif

[edit]

kamil4u ..od razu rzuciły mi się w oczy uwagi a nie zauważyłem, że pierwsze twoje zdanie tyczy się dokladnie tematu smile.gif

[edit]
...dziękuję za wszystkie sugestię ..a żeby w oczy nie koliło troszkę przepiszę ten przykład wink.gif ..a nóż komuś się do czegoś przyda

[edit]

ale się editów uzbierało, prosiłbym jeszce o wyjaśnienie tego

[JAVASCRIPT] pobierz, plaintext
  1. obiekt.click(pokaz.bind(this));
[JAVASCRIPT] pobierz, plaintext


[edit]

..kolejny edit smile.gif ...troszkę zmodyfikowałem skrypt być moze teraz mniej kole w oczy tongue.gif

Ten post edytował WiruSSS 12.09.2013, 17:56:05
Go to the top of the page
+Quote Post
lukasz1985
post 12.09.2013, 19:36:58
Post #5





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


Wow... ok, z mojej strony powiem tak:
Cytat
..a jeszcze odnośnie var i przecinków. Tutaj chyba też jest kilka zdań na ten temat. Ja się trzymam konwencji Stoyana Stefanova. Zysk wydajności wg zasady deklaracji jak najbliżej użycia wg mnie jest na tyle znikomy, że wolę jednak bardziej czytelny dla mnie sposób, wpierw wszystko deklaruję, potem używam.


tutaj mi akurat o wydajność nie chodziło... bo ja właśnie uważam deklarowanie zmiennych tam gdzie się pojawiają za bardziej czytelne w większości przypadków, są od tego wyjątki.

Na temat Function.bind(context) czyli obiekt.click(pokaz.bind(this));... ta funkcja zwraca nową funkcję, która zawsze wykona się w kontekście tego co jest w zmiennej "context", czyli w twoim przypadku - "this". Chodzi ot to, że używając tego podejścia, które przedstawiłeś - gdybyś w którejś z tych funkcji anonimowych użył słowa this to miałbyś w nim pewnie obiekt DOM na którym jest wykonywany click. Używając funkcji "bind" w kontekście zawsze będziesz miał obiekt "slideMenu".

Gdybyś miał coś takiego, bez używania "bind":
[JAVASCRIPT] pobierz, plaintext
  1. showMenu: function()
  2. {
  3. var menu = $(this).children();
  4.  
  5. menu.find('li:first-child').hide();
  6. menu.find('li:last-child').show();
  7. menu.animate({'left': 0});
  8.  
  9. this.hideMenu(); // tu wyskoczyłby Ci error !!!!
  10. },
  11.  
[JAVASCRIPT] pobierz, plaintext


a z użyciem bind... wszystko by było ok (pomijając fakt, że 2 funkcje animate by sie ze sobą pogryzły, ale nie chodzi tu o funkcjonalność tylko logikę "bind").

Mi teraz Twój kod bardzo się podoba. JS to język programowania, a mówiąc po polsku nie bełkoczemy tylko mówimy do rzeczy smile.gif.

Przy okazji zauważ, że gdybyś z innego miejsca skryput chciał zamknąć "slideMenu" to wystarczy slideMenu.hideMenu();


EDIT: Jeszcze jedna sprawa: zamiast pisać w każdej metodzie (funkcji) "var menu = $(this).children();" mógłbyś to zapisać właśnie w obiekcie "slideMenu", ale do tego potrzebujesz konstruktora "SlideMenu".... aby każde menu było osobnym obiektem SlideMenu. No ale to już jak chcesz.

Ten post edytował lukasz1985 12.09.2013, 19:46:56
Go to the top of the page
+Quote Post
WiruSSS
post 12.09.2013, 20:49:29
Post #6





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

Ostrzeżenie: (0%)
-----


..no niestety z moim programowaniem tak jest, zajmuję się tym od około 10 lat, ale od początku byłem samoukiem, a kod który pisałem w 90% przypadków nie trzymał się żadnych wzorców, tylko był pisany jak leci.

Jednak od jakiegoś czasu staram się uporzadkować to co do tej pory się nauczyłem, zainwestowałem troszkę w ksiązki i na nowo odkrywam programowanie. Dopiero teraz zaczyna mi to przynosić naprawdę sporą frajdę smile.gif

Wracając do przykładu. Własnie chciałem uniknąć tutaj tworzenia nowych obiektów przypisanych konkretnemu menu. Jednak natknąłem się na pewien problem, przez który nie wiem czy nie będę musiał jednak z konstruktora skorzystać. Chcę mieć możliwość ustawiania menu zarówno po lewej stronie jak i po prawej.

Masz jakiś pomysł w jaki sposób najlepiej to zrobić? Poczyniłem próby z dodatkowymi zmiennymi przechowującymi position().left. W momencie kiedy jest większe od zera, animacja się winna przestawić na right, no i buttony oczywiśce też. Tylko nie wiem czy to znów w miarę optymalne. Bo kod już tak ładnie jak teraz z takimi warunkami się nie prezentuje tongue.gif

Chciałbym uniknąć zbędnej konfiguracji, wolałbym aby wszystkie menu uruchamiały się automatycznie w zależnosci do której strony okna przylegają (wiadomo, że o to aby menu przylegało do konkretnej strony, będzie musiał sobie zadbać programista korzystający ze skryptu, definiując to w arkuszu stylów za pomoca position lub float)

[EDIT]

...czy zastosowanie czegoś takiego będzie sie bardzo kłóciło z przyjętymi konwencjami?

[JAVASCRIPT] pobierz, plaintext
  1. var SlideMenu = function()
  2. {
  3. //konstruktorek
  4. }
  5.  
  6. $(document).ready(function(){
  7.  
  8. $.each($('.slide-menu'), function(){
  9. new SlideMenu(this);
  10. });
  11.  
  12. });
  13.  
  14.  
[JAVASCRIPT] pobierz, plaintext


...tak jak piszesz zastosowanie konstruktora bardzo mi ułatwi sprawę i jednocześnie pozwoli na zachowanie przejrzystego kodu, tylko nie wiem czy takie "szastanie" $(document).ready() powinno mieć miejsce tongue.gif ...to by mi znów zapewniło uruchomienie skryptu przez zdefiniowanie samej klasy dla menu, czyli brak zbędnej jak dla mnie konfiguracji i uruchamiania każdego menu z osobna.

Mam wrażenie, że powinienem do tego użyć wzorca factory. Jednak właśnie to jest mój główny problem. Nie zawsze jest dla mnie oczywiste, z którego wzorca najlepiej skorzystać tongue.gif

Ten post edytował WiruSSS 12.09.2013, 21:20:29
Go to the top of the page
+Quote Post
lukasz1985
post 14.09.2013, 21:49:36
Post #7





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


Kilka spraw odnośnie tego kodu:

- nie dajesz osobie korzystającej z tej klasy "SlideMenu" możliwości wybrania tego co będzie sliderem.
- "Własnie chciałem uniknąć tutaj tworzenia nowych obiektów przypisanych konkretnemu menu" - to kompletnie błędne rozumowanie, właśnie o to chodzi, że każde menu to osobny obiekt
- nie CSS decyduje o tym po której stronie ma być slider. Tu mieszasz reprezentację z logiką. To skrypt ma decydować po której stronie ma być slider.

Cytat
Chciałbym uniknąć zbędnej konfiguracji, wolałbym aby wszystkie menu uruchamiały się automatycznie w zależnosci do której strony okna przylegają (wiadomo, że o to aby menu przylegało do konkretnej strony, będzie musiał sobie zadbać programista korzystający ze skryptu, definiując to w arkuszu stylów za pomoca position lub float)


Jak wyżej plus jeszcze jedno - właśnie o to chodzi, że pisząc jakikolwiek kod który ma być ponownie użyty - musisz udostępnić zmienne konfiguracyjne.

Programista (kod kliencki) sam decyduje jaki plugin / bibliotekę chce użyć - i robi to w $.ready(). Ty tylko tworzysz funkcjonalność, dając mu do dyspozycji zmienne konfiguracyjne. Tutaj pojawia się też jeszcze jedna wada Twojego podejścia - że w CSS chcesz zawrzeć logikę tego skryptu. Rozbijasz API na CSS i JS, co już jest nie do przyjęcia.

Jeśli już chcesz odpalać menu "hurtem" to albo pozwól na to programiście albo utwórz nową klasę, która będzie zarządzać instancjami menu.

Wzorzec fabryki na nic tutaj się nie zda - nie do tego służy.

Tutaj jest kod: http://jsfiddle.net/a4Bpv/3/

powinien działać w wersji bez głupiego "JsFiddle", w czystym HTMLu.

Go to the top of the page
+Quote Post
WiruSSS
post 14.09.2013, 23:26:35
Post #8





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

Ostrzeżenie: (0%)
-----


Cytat
- nie CSS decyduje o tym po której stronie ma być slider. Tu mieszasz reprezentację z logiką. To skrypt ma decydować po której stronie ma być slider.


A guzik, akurat z tym się nie zgodzę. To menu ma dziełać również bez js, ale choćby nawet było inaczej. Js nie powinno decydowac o jego położeniu. Użytkownik ma sobie stworzyć menu, ustawić gdzie chce, i jeśli będzie chciał aby się chowało, wystarczy, że nada klasę, .slide-menu

Przyjrzyj się temu jeszcze raz. Skrypt sprawdza szerokość menu oraz jego położenie względem rodzica, u na podstawie tego decyduje jak ma się animować. Po co do tego zbędna konfiguracja?
Go to the top of the page
+Quote Post
lukasz1985
post 15.09.2013, 10:46:33
Post #9





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


Źle to robisz, nie powiem Ci czemu bo do tego wystarczy odrobina wyobraźni.
Go to the top of the page
+Quote Post
WiruSSS
post 15.09.2013, 17:54:54
Post #10





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

Ostrzeżenie: (0%)
-----


Ale to, że robię to inaczej niż zrobiłby to kto inny, nie koniecznie oznacza że jest źle wink.gif
Jeśli tak się upierasz to bardzo proszę zaprezentuj mi fragment kodu odpowiadający (wg Ciebie w warstwie logicznej bo dla mnie to zawsze będzie warstwa prezentacyjna) ustalenie pozycji menu za pomocą javascript?

Ten post edytował WiruSSS 15.09.2013, 17:55:19
Go to the top of the page
+Quote Post
PrinceOfPersia
post 16.09.2013, 07:20:12
Post #11





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

Ostrzeżenie: (0%)
-----


Cytat
Dla jasności jeszcze raz napiszę: Czy da się owy efekt uzyskać w prostszy sposób

na pewno da się skrócić kod. To co mi się rzuca w oczy, to straszne ilości zduplikowanego kodu:

Cytat
var menu = $(this).children(),
direction = ($(this).position().left > 0 ? 'right' : 'left'),
anim = {};


to masz z 3 razy w różnych funkcjach powtórzone.

tak samo to:
Cytat
menu.find('li:' + (direction === 'left' ? 'first' : 'last') + '-child').hide();
menu.find('li:' + (direction === 'left' ? 'last' : 'first') + '-child').show();
menu.animate(anim)


a powtarzanie sie jest bez sensu, bo będziesz chciał coś zmienić - 3 razy więcej roboty.
W zasadzie dobrze byłoby wydzielić powtarzający się kod do jakiejś osobnej funkcji pomocniczej, np.:
Kod
function getMenuParams(self) {
  var menu = $(self).children(), direction = ($(self).position().left > 0 ? 'right' : 'left'), anim = {};
  return {menu:menu, direction:direction, anim:anim};
}


a potem zamiast:
Kod
var menu = $(this).children(),
            direction = ($(this).position().left > 0 ? 'right' : 'left'),
            anim = {};

wywołujesz tylko funkcję i przypisujesz zmienne z funkcji:
Kod
var p = getMenuParams(this);
var menu = p.menu, direction = p.direction, anim = p.anim;


Cytat
Czy muszę rozgraniczać się do zdarzenia chowania menu osobno a do zdarzenia wysuwania menu osobno?

Nie musisz. Możesz zrobić to w jednej funkcji. Na dobrą sprawę showMenu i hideMenu robią dokładnie to samo, różnią się tylko jedną linijką:
w hide jest
Kod
anim[direction] = -menu.width() + 'px';

a w show
Kod
anim[direction] = 0;


czyli możesz zamiast zrobić osobne funkcję dać jedną funkcję showHideMenu, i showHideMenu(true) oznacza pokazanie, showHideMenu schowanie:
Kod
    showHideMenu: function (isShowing) {
        "use strict";
                var p = getMenuParams(this);
                var direction = p.direction, anim = p.anim, menu = p.menu;

        anim[direction] = isShowing? 0 : -menu.width() + 'px';

        menu.find('li:' + (direction === 'left' ? 'first' : 'last') + '-child').hide();
        menu.find('li:' + (direction === 'left' ? 'last' : 'first') + '-child').show();
        menu.animate(anim);
    },

coś jak to (nie chce mi się tego testować czy wszystko się odpala, ale w zarysie tak mniej więcej).

No i żeby zrobić "lukier składniowy", możesz zostawić funkcje showMenu / hideMenu, ale w ten sposób, że będą odwoływać się do showHideMenu:

Kod
showMenu: function() {
  this.showHideMenu(true);
},

hideMenu: function() {
  this.showHideMenu(false);
},

tym sposobem dalej będziesz mógł pisać hideMenu() / showMenu().

EDIT:
albo zrób tak jak kolega napisał, z utworzeniem konstruktora i osobnego obiektu do każdego menu. Whatever works wink.gif Ważne, żeby nie powtarzać zbyt dużej ilości kodu (bo tak jak teraz masz jest tragicznie pod kątem powtarzania). Zresztą wsadzenie czegoś w jeden obiekt wcale nie przeczy temu co napisałem.


Cytat
Chociaż i tego rzadko używam bo w programowaniu obowiązuje zasada - deklaruje zmienne jak najbliżej miejsca w którym zostaną użyte.

w JavaScript do zalecanych praktyk należy deklarowanie zmiennych na początku funkcji - chyba wiesz dlaczego (dla postronnych - chodzi o to, że zasięg zmiennych deklarowanych przez 'var' jest na całą funkcję (a nie na blok kodu, jak to jest np. w C++)

Cytat
- nie CSS decyduje o tym po której stronie ma być slider. Tu mieszasz reprezentację z logiką. To skrypt ma decydować po której stronie ma być slider.

to po której stronie/w którym miejscu ma być slider, to właśnie warstwa reprezentacji i powinno to być ustawiane w HTML/CSS.




--------------------
Go to the top of the page
+Quote Post
lukasz1985
post 17.09.2013, 10:32:40
Post #12





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


Ok. To bawcie się w deklarowanie zmiennych konfiguracyjnych w CSS. Powodzenia w momencie kiedy przyjdzie 10 nowych zmiennych konfiguracyjnych albo 10 nowych sposobów reprezentacji. I tak powstaje "modularny" kod. Śmiechu warte.

EDIT: Obiektów w JS nie nazywa się "showHideMenu" bo to jest idiotyczna nazwa. Używa się do tego setterów. Dla rozgrzewki intelektualnej pozostawię to do przemyślenia czytającemu.

Ten post edytował lukasz1985 17.09.2013, 10:35:33
Go to the top of the page
+Quote Post
PrinceOfPersia
post 17.09.2013, 11:33:12
Post #13





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

Ostrzeżenie: (0%)
-----


Zamiast się mądrzyć i odsądzać od czci i wiary innych userów, jakbyś był jakimś guru, przeczytaj jeszcze raz mój post, tym razem ze zrozumieniem.

Cytat
EDIT: Obiektów w JS nie nazywa się "showHideMenu" bo to jest idiotyczna nazwa.

nie pisałem o obiektach, tylko o funkcjach:

czyli możesz zamiast zrobić osobne funkcję dać jedną funkcję showHideMenu, i showHideMenu(true)
(pomijam to, że każda funkcja w języku JavaScript to też obiekt, bo nie o to tutaj chodzi, tylko o to, że nie doczytałeś dokładnie mojego posta. Mowa o zwyczajnej funkcji, która jest w stanie pokazać/schować menu, a nie o jakimś wysublimowanym obiekcie).

to, że nie czytasz dobrze postów, zauważyłem już na początku tego wątku, bo napisałeś:
Cytat
Zauważ też, że "show.parent().hide()" i "show.parent().show()" wygląda idiotycznie smile.gif Może znalazłyby się lepsze nazwy dla zmiennych "show" i "hide" ?

przecież show() i hide() to nie zmienne, a nazwy metod jQuery. Jeśli wygląda to idiotycznie, pretensje do Johna Resiga.

Cytat
. Używa się do tego setterów.

setterów i getterów ogólnie się nie powinno raczej używać, ale zostawmy ten temat, bo to długa dyskusja.


Cytat
]Ok. To bawcie się w deklarowanie zmiennych konfiguracyjnych w CSS. Powodzenia w momencie kiedy przyjdzie 10 nowych zmiennych konfiguracyjnych albo 10 nowych sposobów reprezentacji.

od wyglądu i układania layoutu jest CSS i HTML, takie są ogólne prawa tworzenia stron internetowych
Oczywiście, są rzeczy, które stricte do wyglądu nie należą (wtedy bardzo często w przypadku różnych pluginów do jQuery czy bibliotek JSowych należy podać parametry konfiguracyjne w konstruktorze danego obiektu (coś a la new SlideMenu({menuType:'profesionalMenu', name:'menu główne', hoverBehavior:'slide', delay:1000}), ale to akurat, po której stronie ekranu jest menu i czy na górze czy na dole strony to akurat normalne, rutynowe zadanie dla HTMLa i CSSa, a nie dla JavaScriptu (który służy bardziej do logiki, interakcji, obsługi zdarzeń).

W ogóle źle na to patrzysz. To nie jest "konfiguracja" a raczej warstwa wyglądu, widoku. Zamiast się mądrzyć bez zrozumienia specyfiki stron internetowych, poczytałbyś wpierw o wzorcu MVC i o ogólnych trendach w tworzeniu stron internetowych. Zobaczyłbyś np. jak jest zbudowana biblioteka Twitter Bootstrap - tam się wszystko "konfiguruuje" w HTML).

Cytat
Jeśli już chcesz odpalać menu "hurtem" to albo pozwól na to programiście albo utwórz nową klasę, która będzie zarządzać instancjami menu.

"jak ktoś ma młotek, wszędzie będzie widział gwoździe". Problem jest taki, że patrzysz na to z perspektywy tylko i wyłącznie programisty, co jest podstawowym błędem - stron internetowych się nie programuje, a raczej wszystko składa w całość - jest tu trochę programowania po stronie serwera(PHP itp.), trochę kodu HTML/CSS, trochę programowania w JavaScripcie, trochę grafiki w postaci JPG/PNG, trochę baz danych - w każdym razie "tworzenie stron internetowych" to coś więcej niż "programowanie", które jest zaledwie jedną z części układanki.

Ten post edytował PrinceOfPersia 17.09.2013, 11:36:55


--------------------
Go to the top of the page
+Quote Post
lukasz1985
post 17.09.2013, 11:39:56
Post #14





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


Funkcja jest obiektem w JS. Ale skoro tego nie wiedziałeś, to tutaj kończy się nasza rozmowa.


https://www.youtube.com/watch?v=bzkRVzciAZg

Ten post edytował lukasz1985 17.09.2013, 11:45:54
Go to the top of the page
+Quote Post
PrinceOfPersia
post 17.09.2013, 11:49:32
Post #15





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

Ostrzeżenie: (0%)
-----


Właśnie w idealny sposób pokazałeś, że nie umiesz czytać ze zrozumieniem, albo jesteś zwykłym trollem, nie wiem.

Umiejętność rozumienia tekstu pisanego w języku polskim się kłania.

Cytat("PrinceOfPersia")
każda funkcja w języku JavaScript to też obiekt,


Cytat("lukasz1985")
Funkcja jest obiektem w JS. Ale skoro tego nie wiedziałeś, to tutaj kończy się nasz rozmowa.


Albo cierpisz na dysleksję albo trollujesz. Z agresywnego tonu twoich wypowiedzi wnioskuję, że to drugie. Więc dobranoc.




--------------------
Go to the top of the page
+Quote Post
lukasz1985
post 17.09.2013, 12:24:01
Post #16





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


To po co wcześniej ta uwaga:
Cytat
nie pisałem o obiektach, tylko o funkcjach:


Problem nie tkwi w tym, że ja rzekomo nie potrafię czytać ze zrozumieniem, lecz w tym że Ty nie piszesz z logiką.

Jest tysiąc argumentów na to, że rozwiązywanie tego przez CSS jest głupotą, z których wymienię:
- problemy z integracją skryptów z systemami CMS jako pluginy, gdyż zmienne z bazy danych są przekazywane do JS przez HTML, a nie przesyłane zapytaniem przez CSS.
- rozrzucenie API pomiędzy JS i CSS
- CSS służy stylowaniu pojedynczych elementów, a nie definiowaniu zachowania dynamicznej zawartości inicjowanej przez JS, poza trywialnymi przypadkami - kiedy animacja służy właśnie jedynie samej prezentacji


Właśnie dzięki takim "bootstrapom i node.js -om" i innym zboczonym podejściom do tworzenia stron internetowych "technologie webowe" stoją w miejscu albo ciągle są problemy z dopasowaniem API, z jednego prostego powodu - takie podejście nie jest skalowalne.

Ty nie dałeś jednego logicznego argumentu, a jedynie ciągle opowiadasz, że to jest warstwa prezentacji. O ile faktem jest, że położenie obiektu można zdefiniować w CSS - głupotą jest definiowanie zmiennych konfiguracyjnych skryptu w CSS. Jeśli za coś odpowiada skrypt - powinien odpowiadać za to do końca . Wy chcecie chwycić dwie sroki za ogon ale wam to nie wyjdzie i z czasem się wam wszystko rozpadnie w rękach.
Go to the top of the page
+Quote Post
WiruSSS
post 17.09.2013, 18:16:55
Post #17





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

Ostrzeżenie: (0%)
-----


...ale się gorąco zrobiło. W zasadzie skypt miał być do moich celów a ja specjalnej konfiguracji nie potrzebuję (wystarczy mi jedynie ustalić czy dane menu ma być na starcie schowane czy wysunięte). Postaram się jednak napisać ten kod najlepiej jak potrafię. Wszystkie uwagi są dla mnie bardzo istotne także bardzo za nie dziękuję. no i licze też na rozluźnienie atmosfery, przecież od tego nie zależy niczyje życie i świat się nie zawali smile.gif

Cytat(lukasz1985 @ 17.09.2013, 13:24:01 ) *
Jest tysiąc argumentów na to, że rozwiązywanie tego przez CSS jest głupotą, z których wymienię:
- problemy z integracją skryptów z systemami CMS jako pluginy, gdyż zmienne z bazy danych są przekazywane do JS przez HTML, a nie przesyłane zapytaniem przez CSS.
- rozrzucenie API pomiędzy JS i CSS
- CSS służy stylowaniu pojedynczych elementów, a nie definiowaniu zachowania dynamicznej zawartości inicjowanej przez JS, poza trywialnymi przypadkami - kiedy animacja służy właśnie jedynie samej prezentacji


Do tego się odniosę bezpośrednio bo tutaj widzę że chyba nie do końca się zrozumieliśmy smile.gif i być może dlatego taka różnica zdań.
w projekcie nad którym pracuje, potrzebuję 4 takie menu. Mają one działać zarówno z JS jak i bez niego o czym zresztą pisałem. Pisząc działają, miałem na myśli, da się w nie kliknąć ...mają być po prostu zawsze wysunięte. Mają one być w konkretnych miejscach na stronie i nie mogę tego uzależniać od javascriptu, dlatego też zrobiłem to tak, że menu samo wykrywa do której krawędzi przylega i od tego uzależnione jest czy chowa się w lewo czy w prawo. Wydaje mi się to najrozsądniejszym rozwiązaniem smile.gif

Ten post edytował WiruSSS 17.09.2013, 18:25:19
Go to the top of the page
+Quote Post
lukasz1985
post 18.09.2013, 12:12:30
Post #18





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


Jeśli chcesz mieć frajdę z tego co robisz - rób elementy, które będziesz mógł wykorzystywać ponownie i twórz dla nich API + dobrą dokumentację. Kiedy przyjdzie do kolejnego projektu z podobną funkcjonalnością - przypomnisz sobie, że już coś takiego masz w bibliotekach, a jeśli trzeba będzie - dodasz nową funkcjonalność. W ten sposób - Twoja biblioteka się polepszy, a kod pozostanie modularny, a nie zasmrodzony skryptami tu i tam.
Weź na przykład jakiś Lightbox czy Colorbox, albo te Countdowny. Mógłbym też dać przyklad ExtJs Sencha Labs - kompletna bibltioteka GUI, która powstawała stopniowo czy TinyMCE(niesamowite to jest jak ten edytor można wzbogacać i do jakiego stopnia rozwinął się tam system pluginów).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 30.05.2024 - 19:02