Keresés

Hirdetés

Új hozzászólás Aktív témák

  • Sk8erPeter

    nagyúr

    válasz TonTomika #422 üzenetére

    A Waypoints pluginnek van egy "Scroll Analytics" demója, ehhez hasonló megoldással figyelheted, hogy hol tart a scrollozás.

    Sk8erPeter

  • Karma

    félisten

    válasz TonTomika #424 üzenetére

    Persze, klasszikus felhasználása a position: fixed CSS sornak :P

    Láttam már Waypointsszal implementálva is, de lehet külön libraryvel is. Ha ezen kívül másra nem használnád a Waypointsot, szerintem emez jóval egyszerűbb.

    “All nothings are not equal.”

  • Sk8erPeter

    nagyúr

    válasz TonTomika #426 üzenetére

    Ha ilyesmi kell, arra akkor a Waypoints oldaláról a Sticky Elements mutat példát.

    Sk8erPeter

  • Karma

    félisten

    válasz TonTomika #835 üzenetére

    Végre egy kis élet a topikban.

    Hát, az első gondolatom az volt a sorok olvasása közben, hogy téged is elkapott a Not Invented Here (NIH) szindróma - azaz inkább megírod puszta kézzel azt, amire a CMS-eket már mióta feltalálták. Egy kicsit remélem, hogy ez valami ujjgyakorlat, és nem egy valódi vevőnek szánt valódi oldal.

    Ömleszteném inkább a további gondolataimat, sok mindenre benne lesz a válasz:

    1) Változónevek! $-ral hagyományosan a jQuery által bewrappelt objektumokat szokás jelölni, a sima stringekhez nem annyira pálya. Másrészt nem kell spórolni a betűkkel, az "$a", "$c" és egyéb szutykolás helyett rendes, beszédes neveket használj, és akkor talán olvasható marad a kód két nap múlva is. Nekünk meg azonnal.

    BASIC programozó voltál ezelőtt?

    2) Ez a rész:

    if($c == $a) {
    $("body div#nav ul li#1 a").css('color', '#494949');
    }

    Nem csak a c és a olvashatatlan változók miatt rossz. Nem illik (más szóval elítélendő baromság) a JS kódba beleraknod a konkrét CSS stíluselemeket, használj egy új classt hozzá; a színt meg a külső CSS fájlodban definiáld ehhez a classhoz.

    Eztán használd az addClass(), removeClass(), toggleClass() jQuery függvények megfelelőjét a kiemeléshez.

    3) Nem nehéz elérni, hogy az azonos szinten lévő többi elem becsukódjon, csak használnod kéne a HTML-ben a classokat a különböző szintek csoportosításához.

    Pl.:

    $(".main-menu-item.submenu").click(function() {
    var $item = $(this);
    $item.slideDown(0.1).siblings(".submenu").slideUp(0.1);
    });

    Nem teszteltem, csak ideírtam fejből.

    4) Dinamikus változók... Minden dinamikus a JavaScriptben bizonyos szempontból. A DOM fa bármikor változhat, ezért lehet a jQuery segítségével megadott feltételek alapján keresni. Például az aktuális menüelemnek adsz egy "highlighted" nevű classt (lásd 2. pont), akkor a $(".highlighted") selector visszaadja ezt az elemet, bármikor.

    Ugye hogy értelmetlen közvetlenül a színeket állítgatni?

    5) Egyébként mondogatod ezt a dinamikus jelzőt, de használható infó nem jött át.

    Mikor is történik ez a DB elérés? Az oldal generálásakor a PHP (vagy más backend) végzi el, így a lejövő oldal igazából statikus; vagy AJAX hívásokkal töltöd le a menüelemeket az oldal betöltődése után? (Utóbbi esetben: miért?)

    Egyáltalán ha rákattintasz egy linkre, akkor az újratölti az oldalt? Vagy új ablak? iframe? Vagy sikerült framesetet használni 2012-ben? (Brrrrrrrrr)

    Ezek a kérdések elég fontosak, mert más megoldási lehetőségeket lehet az esetekben csinálni...

    6) Egyébként ha tényleg dinamikus, akkor az .on() függvény segítségével tudsz eseménykezelőket rendelni a HTML elemek egy csoportjához - már előre, azelőtt, hogy ténylegesen létrejöttek volna. Nagy királyság. De nem biztos, hogy neked ez tényleg kell...

    Szóval összegezve az biztos, hogy meg kellene barátkoznod a HTML-ben classok fogalmával, és sürgetőlegesen alkalmaznod a problémára.

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Sk8erPeter

    nagyúr

    válasz TonTomika #835 üzenetére

    Karma és martonx tök jól leírták a lényeget - többek közt amit én is nagyon hangsúlyoznék: ne gányolj, és soha többé ne használj ilyen semmitmondó fos változóneveket, mert normális fejlesztőnek az ilyentől széjjelnyílik az agya, aztán szíve szerint utolsó leheletéig ütné azt, aki ilyet csinált. :)

    Még valami:
    van ez a kódrészleted:
    $("body div#nav ul ul#szolgaltatasok")
    Mivel itt egyedi azonosítók tartoznak ezekhez a DOM-elemekhez, tökéletesen felesleges ilyen rohadt hosszú selectort írni. Elég ennyi:
    $("ul#szolgaltatasok")
    vagy akár az ul-t is lehagyhatod, bár ez még nem árthat, mert legalább egyértelművé teszi, hogy itt egy listáról van szó.
    Ezenkívül egy kissé általánosabban kéne megírnod a kódjaidat, nem "bedrótozni" az egyes menüelemekhez tartozó viselkedést. De asszem hasonlót már leírt Karma is. A lényeg, hogy tényleg legyenek class-aid, és azok megléte vagy nem léte szerint viselkedjenek az elemek.

    "A feladat, hogy mindegyik aktuális menüpont ahol éppen jár az ember highlightolva legyen."
    Ezt gyorsan felejtsd el, hogy ilyen window.location.pathname-hez hasonló hülyeségekkel szívatod magadat, feltételezem, itt egy NEM AJAX-szal legenerálódó menüről van szó - az aktív menüpontot jelző class-t normális esetben szerveroldali nyelvvel (pl. PHP-vel) szokták belegenerálni az adott menüpontba.
    Tehát ha mondjuk van egy <ul> listád, akkor pl. a "rolunk" oldalon van egy "active" (vagy épp "highlighted" class, mint ez:
    <ul>
    <li><a href="/XYZ">XYZ</a></li>
    <li class="highlighted"><a href="/rolunk">Rólunk</a></li>
    ....
    </ul>

    Remélem érthető így.

    Ami még fontos, és amire martonx is célzott: a lenyíló menük problémáját már előtted megoldották mások, úgy, hogy agyontesztelték mindenféle böngészőben, úgyhogy tényleg ne most találd fel a spanyolviaszt.
    Ajánlott plugin lenyíló menüs macerára: Superfish.
    jQuery-alapú, egyszerű, faszányos.

    Sk8erPeter

  • Sk8erPeter

    nagyúr

    válasz TonTomika #840 üzenetére

    "Ez a kódrészlet csak egy teszt egyébként, azért van így kódolva, egyébként nem BASIC örökség, csak hirtelen ez így egyszerűbbnek tűnt."
    Ha most kezded az érdemi kódolgatást, akkor tényleg szokj le róla még időben, hogy ilyen változóneveket használj, még tesztnek sem alkalmas, mert lehet, hogy később szeretnéd ezt a tesztet továbbfejlesztgetni, aztán már fingod nem lesz róla, hogy milyen változó mi a francot csinál.

    "Ki kell, hogy ábrándítsalak, ez most egy valódi vevőnek szánt honlap, ám azért is nem választottam CMS-t mert nagyon egyszerű felületre van szüksége, csak képfeltöltésre a megfelelő projekt menüpontjába, ahol egy nivo slider váltogatja a képeket. A WordPresst ismerem és szeretem is, de ehhez a projekthez túl soknak gondoltam, aztán lehet hogy kicsit megszívattam magamat."
    Na, akkor ezt még most, az elején még egyszer gondold át. :D
    Úgyis tuti, hogy az lesz, hogy a vevő majd rájön idővel, hogy akar admin-felületet is, rájön, hogy hoppá, mégis kéne egy plusz valami bele, aztán még valami, és akkor eljutsz oda, hogy döngeted a fejed a falba, hogy a francért nem használtál inkább CMS-t már az elején. Egy normális hosztingnál el kell, hogy bírja megfelelő tempóval az amúgy erőforrás-igényes CMS-t is.
    A másik: nehogy már 2012-ben FTP-vel feltöltött fájlokat olvasson be a scripted egy könyvtárból, aztán azt listázza ki agyatlanul sorrendben...
    Már ilyen pluginek vannak, mint a Plupload, amivel szépen lehet egyszerre sok fájlt feltölteni, és ezt lekezelheted PHP-vel, feltöltheted az elérési utakat adatbázisba, stb... de tuti, hogy van erre valami Wordpress-modul is (Drupalban van, tuti, hogy WP-ben is van).

    Ha ez most egy vevőnek szánt honlap, nem hiszem, hogy az ő weboldalát kéne ujjgyakorlatnak használni.

    Sk8erPeter

  • Sk8erPeter

    nagyúr

    válasz TonTomika #842 üzenetére

    Hát jó. :D

    A click-elősre úgy látszik, gányolni kell a plugint: [link], [link]
    A megnyitásra meg több példa is van az oldalon, hogy hol jelenjenek meg, ne felejtsd el végignézni a példákat, hátha ott van az orrod előtt a megoldás készen. :)

    Sk8erPeter

  • Speeedfire

    nagyúr

    válasz TonTomika #845 üzenetére

    Ehhez miért kell php? Elvileg ha megvan csinálva az ul li ul li szerkezet akkor a parent is aktív lesz.
    Illetve ha így css-el nem megy akkor inkább maradj a jquery mellett szerintem.
    Ha children amire kattintasz akkor a parent-nak adj egy addclass-ot, ha nem akkor csak annak. Illetve ha már elkattintasz akkor az előzőnek egy removeclass. Gondolom valami jó kis jquery-t írtál rá, nem néztem meg. De szerintem simán beágyazható ez a plusz kód.

    Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

  • Sk8erPeter

    nagyúr

    válasz TonTomika #848 üzenetére

    Ja jó, felfogtam, mi kéne, most látom a belinkelt oldaladat.

    "Mert a jQueryt azt nem igazán ismerem és nem tudtam, hogy ezzel is lehet a href attribútumot vizsgálni. "
    JavaScripttel mindent lehet "vizsgálni", és mivel a jQuery tulajdonképpen a legtöbb JavaScriptes művelet köré épít egy "wrappert", ezáltal egyszerűbbé téve a használatát, ezért jQuery-vel is mindent lehet "vizsgálni". :)

    Igazából mi értelme a "highlight" class-odnak, ha semmit nem csinálsz vele?
    Ha jól értem, itt valami olyasmit csinálsz, hogy hozzáadod az aktív elemhez, meg minden szülőelemhez is... bár ezt nem így csinálnám, de ha már így van, akkor a highlight class-nak adhatnál egy display:block tulajdonságot, hogy eleve nyitva legyen. Vagy hasonló. Mondjuk akkor már másképp kéne elnevezni...
    Igazából azt szokták jelezni, hogy melyik MENÜPONT aktív, nem szokás a szülőknek is megadni az aktív tulajdonságra jellemző osztályt.
    Lényeg, hogy amikor lekéred az oldalt, akkor a menühöz szerveroldalon kéne hozzácsapni azt a tulajdonságot, amitől nyitva maradnak ezek a menük.

    Esetleg feltölthetnéd jsFiddle-re a kódot, akkor tuti több kedvünk lesz szórakozni vele. :)

    Sk8erPeter

  • Sk8erPeter

    nagyúr

    válasz TonTomika #851 üzenetére

    Itt felesleges az .on() használata, legalábbis úgy tűnik, nem fogod AJAX-szal bővítgetni a menüdet...
    Csak feleslegesen erőforrás-zabáló. Elég click eseményre feliratkozni.

    A CSS-részt rendesen túlbonyolítottad, változtattam rajta, mondjuk tudom, hogy így elb@szódott a betűtípus, de azt már nem volt kedvem visszacsinálni. :D
    Mindenesetre a selectorokat egyszerűbben is meg lehet adni, pl. a link színénél durván bonyolítottad, sokszor megadva ugyanazt a színt, miközben általánosabban is lehet.

    Magát a nyitogatós kódot az .on() részen kívül nem néztem át, lehet-e egyszerűsíteni.
    Én itt most kihagytam a fenébe a highlight-os szarakodást, tök felesleges.

    Megmutatom, pl. szerveroldalon hogy lehetne megoldani, hogy eleve nyitva legyen, úgy, hogy belegenerálod az <ul>-be az active-list class-t, a linkhez meg pl. az active-link class-t. Ezeknek meg meg van adva, hogy eleve nyitva legyenek.
    Most egyelőre itt meghagytam azt, hogy JS-sel tünteted el a többit. Egyszerűen úgy, hogy .not()-tal kizártam azokat, amik nem rendelkeznek az active-list class-szal.
    A lényeg: a projekt1 az aktív oldal az enteriőrtervezésen belül, ez eleve nyitva van.

    http://jsfiddle.net/pPbbV/2/

    [ Szerkesztve ]

    Sk8erPeter

  • Sk8erPeter

    nagyúr

    válasz TonTomika #1085 üzenetére

    Minek szívatod magad ilyen egyedi tákolmányokkal? (ezektől a mysql_query()-s baromságoktól kiráz a hideg így 2012-ben... meg milyen fantasztikus hibakezelést mutat be ezzel az ... or die(mysql_error()); résszel... :U)
    Itt van egy jól működő megoldás:
    jQuery UI Autocomplete
    + PDO és exceptionök.

    [ Szerkesztve ]

    Sk8erPeter

  • Male

    nagyúr

    válasz TonTomika #1085 üzenetére

    A .val()-lal nem csak lekérdezni tudod az input mező értékét, hanem beleírni is... szóval jól sejted, oda kell beirnod kattintásra, és ezzel éppen meg is tudod tenni.

  • Male

    nagyúr

    válasz TonTomika #1090 üzenetére

    Macerásabb, mint egy kész, de ebből tanulsz legalább... részben én is ezért csináltam magamnak. (én abban a verzióban onclick-ekkel írtam be, hogy másolja az értéket, és zárja be a listát, nomeg ugorjon a következő mezőre.... viszont akkor még nem használtam jQuery-t, nomeg itt erre ugrani szoktak, hogy nem szép megoldás, ugyhogy ezt csak halkan írtam ide :DDD )

    Kérdés mindenkinek :)

    Ha viszont már úgyis írok ide.... Ti hogyan oldanátok meg, hogy az egyik weboldalról a másikra juttassatok át adatokat? Mindkét tárhelyhez, adatbázishoz van hozzáférésem, mindkettőre én írhatom a kódot. Azonban később is működnie kell ennek az áttöltésnek, amikor már csak az adatokat szolgáltató (A) szerverhez lesz hozzáférésem. Nyilvános adatokról van szó egyébként, tehát a küldő oldalon (A) nem kell semmi jogosultság ellenőrzés, a fogadó oldalon (B) pedig csak az admin felületről lehet lekérni-áttölteni, tehát ott meg a saját védelmük dolgozik.

    Elsőre úgy oldottam meg, hogy a "B" oldalon lévő admin felületen JSONP-vel lekérem az adatokat "A"-tól, ellenőrzöm, hogy jó-e. Ha igen, akkor sima $.post-tal elküldöm ("B"-nek, tehát domainen belül)... ez így elvileg sima ügy.
    A gond, hogy localon ez tökéletesen működik is, akkor is, ha az "A" oldal már a neten lévő valós... viszont ha mindkettő a valós helyén fut, akkor nem megy.

    Ami még fontos lehet, JSONP-vel két érték érkezik. Az egyik egy hibakód, ezzel ellenőrzöm, hogy jó-e ami megérkezett, vagy történt valami hiba. A másik pedig maga az eredmény, ami tömörítve jön (egy pár tíz KB-os tömb, jsonencode, majd sima gzcompress, majd egy utf8encode után). A $.post-nál már csak az eredményt küldöm el (és hogy mit kezdjen vele).

    Tesztelgettem, próbálgattam. Ha kiíratom az eredmeny-t, miután megjött "A"-tól, de még a $.post előtt, akkor látszólag oké. Viszont a $.post ahová küldi PHP-t, ott meg mintha nem érkezne meg... isset($_POST['eredmeny'])-t nézek, és false-ot ad (a mit kezdjen vele viszont megérkezik rendben).
    Ha a tömörített cucc helyett csak egy C betűt küldök vissza eredményként, az szépen végig is megy, megérkezik a végső céljához...

    Mi a fene lehet a gond? Egyszerűen nem értem, mert "A"-tól biztos rendben van ami érkezik, hiszen "B"-t localon futtatva, de a valós "A"-tól kérve az adatokat minden rendben működik. A JS kódot ugyan az a gép-böngésző futtatja mindkét esetben, így ezt is kizárnám... a "B" oldalon meg hát... olyan nincs, hogy egy sima isset() localon jól működik, a szerveren meg nem... mert ha kb ennyit hagyok a kódban, akkor is azt mondja, hogy nem kapta meg.
    A szerveren lehet valami korlátozás arra nézve, hogy mit lehet post-olni neki, és ha ettől eltérek, akkor eldobja, vagy mi a fene?

    (Jah, hibaüzenet természetesen sehol sincs, szimplán nem érkezik meg a post-olt tartalom)

    [ Szerkesztve ]

  • Sk8erPeter

    nagyúr

    válasz TonTomika #1085 üzenetére

    Megnéztem az oldalt, amit linkeltél, és ez egérkattintás esetén elvileg jól működik:

    $(document).ready(function(){
    $('#autosuggest-container').on('click', 'ul li', function(){
    var suggested_text = $(this).text();
    $('input#autosuggest').val(suggested_text);
    });
    });

    ================================================

    Egyébként az onkeyup attribútum használata helyett csinálhatnád így:

    <input type="text" name="autosuggest" id="autosuggest" onkeyup="return autoSuggest()" value="" />

    HELYETT

    <input type="text" name="autosuggest" id="autosuggest" value="" />

    JS-kód:

    function autoSuggest() {
    var autoSuggestVal = $('#autosuggest').val();

    if (autoSuggestVal != '') {
    $.ajax({
    url: '_php/ajax/autosuggest.php?query=' + autoSuggestVal,
    success: function (result) {
    $('#autosuggest-container').html(result);
    }
    });
    }
    }

    $(document).ready(function(){
    $('input#autosuggest').keyup(autoSuggest);

    $('#autosuggest-container').on('click', 'ul li', function(){
    var suggested_text = $(this).text();
    $('input#autosuggest').val(suggested_text);
    });
    });

    Sk8erPeter

Új hozzászólás Aktív témák