2013. május 26., vasárnap

Hozzászólások

(#3501) Sk8erPeter válasza Jim-Y (#3499) üzenetére


Sk8erPeter
(PH! nagyúr)

Jaja, ez jó workaround, igazából annyi a trükk, hogy setIntervallal 25 milliszekundumonként rajzoltatja újra a képet, és 5 egységgel mozgatja a négyzetet ide-oda a kurzorgombok lenyomására.
De figyelj azokra a dolgokra, amiket martonx említett.

(#3500) martonx :
jaja, ez tényleg gáz, sajnos sokszor a fejlesztők nem figyelnek oda a felesleges overheadre, ami így kicsiben lehet, hogy nem érzékelhető, de eleve igénytelenül programozni elég gáz.
Meg a cikk mondanivalója nem kicsit félrevezető ezzel az "Until I realized I could just use jQuery." mondattal, amikor ezek a dolgok jQuery nélkül is különösebb macera nélkül megoldhatóak, legalábbis nem itt jön ki a jQuery előnye, az is biztos. Igazából mi az, ami itt rövidíti a kódot? Legfeljebb az eseménykezelés rövidebb egy picit, meg nem írt document.getElementById('canvas')-t, ami valóban hosszabb, mint a $('#canvas'), de nagyjából itt meg is áll a dolog... a többi ergo pontosan ugyanannyiból összehozható plain JS segítségével.

De hogy ne csak a szám járjon, itt van az egész plain JS-ben, különösebb erőlködés és jQuery nélkül:

http://jsfiddle.net/Sk8erPeter/b5sxk/

Kipróbáltam, működik Chrome-ban, Firefoxban, Operában.

Sk8erPeter

(#3502) martonx válasza Sk8erPeter (#3501) üzenetére


martonx
(őstag)

Erről beszéltem. Egyébként ha már karakter baszók akarunk lenni :DDD (mondjuk egy 1000 soros plain js-nél már számíthat méretben), érdemes var w = window illetve var d = document konvenciókat használni, és utána már csak d.getelement.byId, meg w.addeventlistener-eket használni.
Vagy eleve belerakod egy anonim önmeghívó funkcióba, így a js namespace probléma is pipa:

(function(d,w){
//Itt jön a kódod
d.getelementbyid...
w.addevenetlistener...
})(document,window)

HOPPÁ!

(#3503) Sk8erPeter válasza martonx (#3502) üzenetére


Sk8erPeter
(PH! nagyúr)

Jaja, nem rossz ötlet! :)

Sk8erPeter

(#3504) Sk8erPeter válasza martonx (#3502) üzenetére


Sk8erPeter
(PH! nagyúr)

Nesze:
http://jsfiddle.net/Sk8erPeter/b5sxk/1/
:D

Mondjuk ez a spórolás csak fejlesztés közben érdekes, nem betöltéskor.

Félreértések elkerülése érdekében nem fél órát tököltem vele, csak közben kétmillió topicot megnéztem, meg hatmillió e-mailt, aztán eszembe jutott, hogy miért is ne. :DDD

[ Szerkesztve ]

Sk8erPeter

(#3505) martonx válasza Sk8erPeter (#3504) üzenetére


martonx
(őstag)

Betöltéskor is simán lehet egy ilyen trükkel jópár %-kot faragni a kódod méretéből. Nézd meg a jquery-sek mit össze nem kínlódnak pár Kb-nyi csökkentésért. Plusz a namespace-be szervezés, amúgy is hasznos dolog, összetettebb javascript-es oldalnál.
Besimerem amúgy, hogy ez erősen szőrszál hasogatás persze, de ha már js topik, meg helyes módszertanok.

HOPPÁ!

(#3506) Sk8erPeter válasza martonx (#3505) üzenetére


Sk8erPeter
(PH! nagyúr)

"Plusz a namespace-be szervezés, amúgy is hasznos dolog, összetettebb javascript-es oldalnál."
Persze, ez alap. Ez akkor is jól jön, ha valaki valamilyen oknál fogva több library-t is szeretne használni, ami ugyanazt a változónevet használja - lásd például jQuery és MooTools egy oldalon (bár ha ilyenre sor kerül, akkor a fejlesztőkkel van a gond, de kényszerhelyzetben előkerülhet), de lehetne más példát is mondani.

[ Szerkesztve ]

Sk8erPeter

(#3507) CSorBA


CSorBA
(őstag)
LOGOUT blog

Szöveget szeretnék elforgatni, kb 60 fokban, a képen látható módon:

Nos, ki mit hogy ajánlana? Nem akarok CSS3-at használni, mivel elég kompatibilisnek kellene lennie, így jquery mellett döntenék. Tud valaki valami jó rotate plugint?

LEMONS. Perfect for orangejuice.

(#3508) Karma válasza CSorBA (#3507) üzenetére


Karma
(PH! félisten)
LOGOUT blog

google://jquery+rotate első találatok között ez elég szimpatikusnak tűnik. Gyakorlatilag megcsinálja helyetted azt a pár sor CSS-t, amit kézzel is megírhatnál :U

You made 500000 invulnerability potions !

(#3509) CSorBA válasza Karma (#3508) üzenetére


CSorBA
(őstag)
LOGOUT blog

Úgy értettem a feltett kérdésem, hogy ki mit ajánlana, azaz ki mit használ. Rákeresni én is rátudtam :)
Mellesleg amit ajánlottál, az képekhez van.

LEMONS. Perfect for orangejuice.

(#3510) fordfairlane válasza CSorBA (#3509) üzenetére


fordfairlane
(PH! addikt)

Én is belefutottam hasonlóba, ott egy táblázat fejlécében kellett volna 90-kal elforgatni a hosszú header szövegeket. Olyan sok cross-browser jellegű probléma lépett fel, hogy végül inkább szerveroldalon generáltam képekbe a szövegeket, PHP-ben, a GD könyvtárat használva.

imagestringup

[ Szerkesztve ]

(#3511) Jim-Y válasza CSorBA (#3509) üzenetére


Jim-Y
(PH! kedvence)
LOGOUT blog

Egy lehetőség, amit kliens oldalon csinálhatsz.
http://jsfiddle.net/Jim_Y/qvdHS/2/

[ Szerkesztve ]

LMDE

(#3512) Jim-Y válasza Jim-Y (#3511) üzenetére


Jim-Y
(PH! kedvence)
LOGOUT blog

bár mondjuk ez meg html5, ha css3-at nem akartál használni, akkor nyílván ezt sem fogod :D

LMDE

(#3513) Lacces


Lacces
(őstag)

Hali,

jQuery nélkül (unokaöcsém beadandója... és a felsőoktatás szidása nélkül) :)

Hogyan tudnám egy JS-es Ajax hívás eredményét átadni JS változóba? (Az oké, hogy mindenhol a neten a html kiírást látom, meg a jquery-st, de nekem a sima js-be kellene átadnia)
És én meg igazából sosem használtam az alap JS-t AJAX-hoz :U

Kód:

// Gép eredményének inicializálása
var gep = 0;


var ajaxRequest; // ajax kérő változó deklarálása
// Ajax kérő változó inicializálása a böngésző alapján
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer böngésző
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
gep = ajaxRequest.responseText;
}
}
ajaxRequest.open("GET", "gep.php", true);
ajaxRequest.send(null);

alert(gep);

Az alert utasítás, mindig 0-t ad...

A segítséget előre köszönöm :R

(#3514) Karma válasza Lacces (#3513) üzenetére


Karma
(PH! félisten)
LOGOUT blog

Az ajaxRequest elküldése egy aszinkron művelet (lásd az AJAX rövidítés első betűjét :P), így ha közvetlenül az elindítás után alertelsz, nyilván nulla lesz.

Tedd az alertet a "gep = ajaxRequest.responseText;" sor után a callback függvénybe, és instant boldogság. Legalábbis már meglesz az esélye.

[ Szerkesztve ]

You made 500000 invulnerability potions !

(#3515) Jim-Y válasza Karma (#3514) üzenetére


Jim-Y
(PH! kedvence)
LOGOUT blog

Vagy legyen szinkron a kommunikáció, és akkor ki tudod menteni az eredményét egy változóba. Bár pár napja pont erről beszélgettünk, hogy hiába szebb szinkronosan kimenteni az eredményt egy változóba, nem érdemes ezt használni, mert addig blokkolja a többi folyamatot?!

ajaxRequest.open("GET", "gep.php", false);

LMDE

(#3516) Lacces válasza Karma (#3514) üzenetére


Lacces
(őstag)

Igen, úgy alert boldogság!

De nem őrzi meg az értéket utána! Mintha csak ott van meg benne... abban az IF ágban él a gep változó értéke, azon kívül már nem!!! És nem tudom, hogy miért...

Jim-Y : köszi, így jó. Az nem baj, hogy most blokkolja, nem oszt nem szoroz :). Az eredmény megkapása után nem is lenne szabad most ennek a proginak tovább mennie. De így kimenti.
Én egy hide-olt inputba raktam ki az adatot és onnan beolvasni, de az nem volt olyan szép.

Köszönöm szépen mindkettőtöknek :) :R

[ Szerkesztve ]

(#3517) Karma válasza Lacces (#3516) üzenetére


Karma
(PH! félisten)
LOGOUT blog

Megőrzi az, csak a kódod többi része szerintem már rég lefutott, mire a válasz megérkezik és beállítódik. Úgy kellene megírnod a programot (legegyszerűbb nem-halálfejes esetben - én legalábbis tuti megbuktatnám azt, aki a szinkron hívást használja -), hogy azokat a részeket, amik a gep jövőbeli értékét használják, egy külön függvénybe szervezed, amit a callbackből hívsz meg. Azaz kvázi félbevágod a programod futását, amíg meg nem jön a válasz.

Egyébként jQuery-ben pont ugyanezt teszed, csak van egy előre meghatározott promise forma a jövőbeli eseményekhez.

[ Szerkesztve ]

You made 500000 invulnerability potions !

(#3518) Jim-Y válasza Lacces (#3516) üzenetére


Jim-Y
(PH! kedvence)
LOGOUT blog

Pont ugyanez a helyzet jQuerys esetben, ott is ha aszinkron használod a $.ajax-ot, akkor ha kezdeni akarsz valamit a visszakapott értékkel azt csak a success ágban teheted. Meghívhatsz egy függvényt paraméterben az eredménnyel, de mégsem olyan mintha kimentenéd későbbi használtra :)
Itt is pont ez a helyzet. async vs sync

Kicsit olvass vissza vagy itt, vagy a jquerys topicban, a napokban volt erről szó.

LMDE

(#3519) Lacces válasza Karma (#3517) üzenetére


Lacces
(őstag)

neked és Jim-Y köszi.

Az ötleted bevált ;) külön van kimentve. Majd később elolvasom a vitát a szinkron és asszinkronnról, (most csak felületesen ovlastam bele)

(#3520) raggg válasza Jim-Y (#3518) üzenetére


raggg
(tag)

Megjegyzés: JQuery-ben is lehet szinkron módon használni.

http://kranialpanic.wordpress.com/ /// Battlefield / Battlelog: ragdotskynet

(#3521) martonx válasza CSorBA (#3507) üzenetére


martonx
(őstag)

Komolyan ajánlom, hogy felejts el Ie9 alatt minden böngészőt, és csináld CSS-el. Ha már arra vagy kíváncsi, hog ki mit ajánl ;]
Amúgy meg hajrá Szeged :C

HOPPÁ!

(#3522) martonx válasza Lacces (#3513) üzenetére


martonx
(őstag)

"unokaöcsém beadandója... és a felsőoktatás szidása nélkül" - hol itt a probléma a felsőoktatással? Évek óta mióta programozás topikokat olvasom, ez az első értelmes házi feladat.

HOPPÁ!

(#3523) CSorBA válasza martonx (#3521) üzenetére


CSorBA
(őstag)
LOGOUT blog

:DDD

Igen, arra hajlok, megcsinálom css-el. IE alatt gondoltam függőleges lesz, de még az a nyamvadt filter sem működik normálisan, vagy csak a kompatibilitási módban nem. Valami fallbacket fogok kitalálni, vagy lebeszélem őket erről, ugyanis elég rondán tud renderelni dőlt szöveget a firefox, meg a chrome is. IE9 és IE10 viszont gyönyörűen :DDD

LEMONS. Perfect for orangejuice.

(#3524) Sk8erPeter válasza raggg (#3520) üzenetére


Sk8erPeter
(PH! nagyúr)

Igen, és deprecated, ahogy volt már róla szó a topicban. :) Lásd jQuery hivatalos oldala.
Nem jó, nagyon nem az. Ne fagyasszuk be a júzer GUI-ját azért, mert nem jöttünk rá a jó megoldásra.

(#3522) martonx :
én is így látom. Egy "kicsit" értelmesebb, mint a múltkori "valósítsunk meg komplett webshopot CSAK JavaScript-alapokon"-feladat... így legalább a diákok talán elkezdik érteni, mit jelent az, hogy aszinkron kommunikáció.

(#3519) Lacces :
nem volt egy túl nagy vitatéma, a lényeg, hogy senki ne AJAX-ozzon úgy, hogy szinkron kommunikációt erőltet. Mert az rossz.

Sk8erPeter

(#3525) fec555


fec555
(fanatikus tag)
LOGOUT blog

Sziasztok!

ASP.NET-ben fejlesztek egy vertikális menüt, aminek az elemeit egy xml-ből szedem. Amikor megvan a fám, hogy melyik menü alatt milyen almenü helyezkedik el, akkor egy netről lesett javascript a kellő helyekre span-eket pakol be, hogy lenyitható legyen az adott menüpont. A problémám az lenne, hogy a linkem előtt látható spanre kattintva szépen le is nyílik a kellő rész, viszont nekem az kellene, hogy magára a linkre kattintva nyíljon le ami alatta van.

Tudom, hogy egy kicsit kusza, de most szaladtam bele először ilyenbe.

A javascript, amit felleltem:

this.sitemapstyler = function(){
var sitemap = document.getElementById("sitemap")
if(sitemap){

this.listItem = function(li){
if(li.getElementsByTagName("ul").length > 0){
var ul = li.getElementsByTagName("ul")[0];
ul.style.display = "none";
var span = document.createElement("span");
span.className = "collapsed";
span.onclick = function(){
ul.style.display = (ul.style.display == "none") ? "block" : "none";
this.className = (ul.style.display == "none") ? "collapsed" : "expanded";
};
li.appendChild(span);
};
};

var items = sitemap.getElementsByTagName("li");
for(var i=0;i<items.length;i++){
listItem(items[i]);
};

};
};

window.onload = sitemapstyler;

Ha esetleg lenne valakinek valami ötlete, hogy hogyan lehetne megoldani a bajomat, azt nagyon szépen megköszönném.

Az ember előbb-utóbb minden szexhez felnő.

(#3526) Sk8erPeter válasza fec555 (#3525) üzenetére


Sk8erPeter
(PH! nagyúr)

Rakj fel légyszi egy példát jsFiddle-re vagy JSBinre, úgy több az esély, hogy debuggoljuk.

Sk8erPeter

(#3527) fec555 válasza Sk8erPeter (#3526) üzenetére


fec555
(fanatikus tag)
LOGOUT blog

Itt van a JSBinre felpakolva. Ha az adott link neve elé kattintasz, akkor lenyílik az "almenü". Nekem azt kellene valahogy elérnem, hogy ha nincs URL megadva az adott linkhez, akkor nyissa le az alatta lévő childokat, ha van URL-je és child elemei is, akkor az URL-re navigáljon, ha pedig nincsenek child elemei, de URL-je igen, akkor is navigáljon oda.

Az ember előbb-utóbb minden szexhez felnő.

(#3528) Lacces válasza Sk8erPeter (#3524) üzenetére


Lacces
(őstag)

Jah, de a miértjét csak most tudtam meg. (Bár ez full feleslegs volt :D).

martonx: Lehet magamból indultam ki. Én nem értem, hogy miért nem engedte jQuery-ben... (Nem értem, hogy miért nem lehetett volna jQuery-ben ami már majdnem alapkövetelmény, és általában ezt is használják a webfejlesztők többsége.)

(#3529) martonx válasza Lacces (#3528) üzenetére


martonx
(őstag)

ja, hogy nem a példával volt a baj, hanem a javascripttel? Kivételesen ebben is tökéletesen egyetértek a tanárral.
Mára minden hülye a Jquery-t használja (köztük én is), miközben fingjuk sincs a tényleges javascriptről. Ráadásul szvsz mostanra a Jquery erősen túl van hype-olva, a modern böngészőkben sok esetben csak minimálissal több munka natív js-ben megcsinálni ugyanazt, mint jquery-vel.
Szerintem az oktatásnak pont az a lényege, hogy az alapokat tanítsa meg. Olyan ez mintha úgy tanítanának programozni, hogy soha nem tanítják meg, hogy mi az a tömb, meg objektum, hanem nesze itt a spring mvc, aztán java-zunk.
Persze akkor lenne igazán szinvonalas az oktatás, ha a tisztán javscript-elés után, ugyanezt a példát megcsinálnák mondjuk jquery-vel, is hogy a tudás legyen naprakész is. De ez már a vágyálom kategória.

HOPPÁ!

(#3530) CSorBA válasza martonx (#3529) üzenetére


CSorBA
(őstag)
LOGOUT blog

Ezzel teljes mértékben, minden szavaddal egyetértek. És néha szégyellem magam, hogy pl nativ js-ben egyes példákat képtelen lennék megírni, amit jQueryvel persze nem nagy cucc.

LEMONS. Perfect for orangejuice.

Hirdetés

Copyright © 2000-2013 PROHARDVER Informatikai Kft.