Van egy oldal, rajta 300+ álló és fekvő fotó. Ismertek olyan scriptet (vagy jQuery plugint), ami ezeket a fotókat a legkisebb üres területtel össze tudja rendezni? Persze amíg van elég kép ehhez. Ilyesmi végeredmény kéne:
Köszönöm nagyon a sok segítséget! A 4 ciklus egymásba ágyazásáig eljutottam magam is, de még nem volt időm azóta ezzel matekozni. Sajnos kissé el vagyok most havazva mással, úgyhogy ez kicsit szünetel, de el fogom részletesen olvasni és végigrágom magam rajta.
És itt a villámgyors változat a mások által javasoltak megvalósításával, de ciklusok nélkül! Mindkét megoldásnak - helyzettől függően - meg lehet a maga jogosultsága. Nálam az ugrószámos dolgok még mindig az első számjegyre váltanak az utolsót követően, ezért ez is eszerint működik.
var generate_next_2 = function(chars, prev){ var length = chars.length || 0; var str = chars.join('_'); var register = {}, count = chars.length - 1, index, elem;
for(var i = 0; i <= count; i++){ elem = chars[i]; index = str.indexOf(elem); register[index] = i; }
var process = function(prev, count){
var pos = count - 1; index = str.indexOf(prev[count]); index = register[index];
(function(){ if(!Array.prototype['clone']){ Array.prototype.clone = function(){ var copy = []; for(var i = 0,count = (this.length || 0); i < count; i++){ copy.push(this[i]); } return copy; } }
if(!Array.prototype['compact']){ Array.prototype['compact'] = function(){ var res = [] for(var i = 0, count = this.length; i < count; i++){ if(this[i] != null && this[i] !== ''){ res.push(this[i])} } return res; } } })();
var generate_next = function(chars,len, prev /*array type - [elem_1,elem_2,...,elem_X], Number type - number of elems in the output array, String type: comma separated string of the last output*/){
if(!_isArray(chars)){ alert('Type error: chars is not an array'); return; } var length = chars.length || 0; var ini = new Array(len + 1).join(chars[0] + ','); ini = (ini.split(',')).compact();
var res = [], count = 0;
var process = function(arr, pos){
var temp, count = pos + 1;
for(var j = 0; j < length; j++){ temp = arr.clone(); /*a referencia szerinti érték átadás miatt másolni kell*/ temp[pos] = chars[j];
De ott a másik megközelítés is, amit NevemTeve mond (az enyém sokkal egyszerűbb, ha fix és kevés számjegyről van szó, az övé jobban kezelhető, ha a számjegyek száma változhat). Gyakorlatilag gondold végig, hogy írnád le papírra. Vagy vegyünk egy ekvivalens, rávezető kérdést: hogy írod le egy papírra az összes lehetséges négyjegyű számot?
Nyilván elindulsz 1000-től, és elkezdesz hozzáadni egyet-egyet. Aztán, amikor elértél 1009-hez, akkor tudod általános iskolás tanulmányaidból, hogy a 9 visszalép 0-ra, és egyúttal az eggyel előtte levőt előre lépteti: 1010. És aztán így tovább, 9999-ig (vagyis, általánosabban fogalmazva, addig, amíg már a legelső helyiértéktől balra is léptetni kellene, akkor megállhatsz).
Ha nem minden számjegy szerepelhet 0 és 9 között, akkor mennyiben módosul? Nem egyesével lépsz előre, hanem mindig a következő elfogadható számjegyre lépsz. Ennyi az eltérés mindössze.
A pszeudokód az az, hogy nem egy konkrét programozási nyelv, hanem magát az ötletet, az algoritmust írja le az ember egy a szokásos programnyelvekre hasonlító módon. De nem fejti ki feltétlenül az utolsó utasításig, hanem itt-ott közönséges szöveggel is leír egy-két lépést. Annyit, amennyi már elég ahhoz, hogy a lényeget át lehessen látni, meg lehessen érteni, és el lehessen kezdeni a tényleges programmá átalakítását.
Elolvastad? Mert szerintem elég könnyen meg fogod érteni. Egy tömbbe beleteszed a lehetséges számjegyeket, és utána egymásba ágyazol négy ciklust, mindegyik végigmegy ezeken a lehetséges számjegyeken, és a legbelső összeszereli belőle a négyjegyű számokat, sorban. A végén a listádban benne lesz az összes lehetséges változat.
Oké, a foreach talán nem ismerős közvetlenül, akkor mind a négy ciklus legyen a közönséges és megszokott:
for (var i1 = 0; i1 < lehetséges_számjegyek.length; i1++) {
karakter1 = lehetséges_számjegyek[i1];
}
Ilyenből van négy egymásban, és a legbelső ciklusmag már az, ami az előző változatban is volt. Pár sor az egész.
hátulról indulva keressük meg az első olyan pozíciót, ahol a számjegy nem a maximális. Ezt növeljük meg eggyel, és a mögötte lévőket állítsuk a legkisebb értékre (nézd meg a példákat az 5143-ban: aláhúzás jelöli a változott részt)
Sajnos így nekem ezek kínaiak. Mi az hogy pszeudo kód egyáltalán?
Én vhogy úgy kezdtem gondolkodni hogy egy formból egy változóba beolvastatom a számjegyek hosszát, utána generáltatok egy üres tömböt aminek hosszát az előbbi változó határozza meg. Utána veszem a számokat 1-n-ig és feltöltetem velük a tömböt. Ezután veszem a tömb első elemét és egy ciklussal próbálom x-y-ig futtatni ami variációkat hozna létre és kiíratná. Majd veszem a tömb következő elemét és így is variáltatom stb. A fő gond a kivitelezés hogy nem tudom azt algoritmizálni hogy minden variáción végigfusson, mert ahogy én papírra sorban ezeket felírom, arra a saját növekvő helyiértékű szisztémámat használom, mint lejjebb is bemutattam és ezt nem tudom hogy lehetne ciklusokkal leírni. :(
Nem tudom ez mennyire volt érthető, de kb így gondolkodom a dologról.
Köszi! Hát ha ez C és JS-re kell lefordítanom, az meredek. :) Persze ezt-azt látok belőle hogy mikkel kéne foglalkozni, de összességében nem látom át. Koca módon időnként ilyen felbukkanó problémák algoritmizálása esetén ugrok neki újra és újra a kódolásnak, de alapvetően semmilyen programnyelvet nem tanultam hivatalosan...
(persze JS-ben nincsenek típusok, értelemszerűen egyszerűsítsd; C-ben a 'kombináció' paraméter felülíródna az új kombinációval, JS-ben a visszaadott érték legyen az új kombináció)
Üdv! Az alábbi problémát az élet hozta. Leírnám a részleteket hogy érthető legyen mit is akarok.
Nyomógombos, számkódos ajtózáraknál ahol nem változtatják a kódot időnként, látszik a lekopott gombokról, hogy nagyjából miket kell nyomkodni. Na most ha mondjuk vegyük 4 helyiértékes a kód, és 1 számjegy van felhasználva értelemszerűen 1 gomb lesz lekopva és abból adódik a variációk száma összesen: 1 (1111) Ha 2 számjegyet használunk fel ui. 4 helyiértéknél, akkor lehet pl.: 1112 1121 1211 2111
1222 2122 2212 2221
1122 1212 1221 2112 2121 2211
Ez 14 lehetséges variáció 2db kopott gombon. 3 számjegy felhasználásánál 36, 4-nél 24 variáció adódik (nem írom le).
Viszont kéne nekem egy JS kód ami ezeket ilyen mód előállítja elkülönülően egy html-be pl. tetszóleges helyiértékek esetén amit egy form-ban meg tudnék előre adni. Próbáltam gondolkodni hogy lehetne ezt algoritmizálni while ciklusokkal, tömbökkel, tervezgettem papíron ahogy régen szokás volt, de nem sok ötletem maradt hogy ezt milyen programozási technikával lehetne JS-en belül jól megoldani. Tudnátok esetleg ötleteket adni? Köszi!
Ismeri valaki az arbor.js-t? Esetleg GraphViz-t? Php/MySQL-ből kellene kapcsolati hálókat rajzolnom, ehhez hasonlót. Tudna segíteni valaki a megvalósításban?
1: A demó oldal forrását nézve nem találom a helyet, ahol elindítja a js scriptet. Ez hol történik meg?
2: Ha a jobboldali textarea-ban módosítok egy "pont -> pont" párt, kb. 1mp-cel később módosul a graph. De ezt hogy éri el? Az oldal forráskódjában üres a textarea.
3: A HALFVIZ feliratra (about) kattintva azt írja, hogy a régi .dot grafikon-leíró nyelvre alapozott halftone nyelven lehet megadni a pontokat, de a doksiban nem írja le ennek a módját, csak a közvetlen (programozott) megadást: sys.addEdge('a','b'). Vagy ti látjátok?
Esetleg tudtok egy jobb megoldást kapcsolati hálók megjelenítésére?
Hmm, hülye vagyok, a gombok kattintása valószínűleg eleve elveszi a fókuszt, ezzel így ebben a formában tehát nincs mit kezdeni. Az persze még érdekel, hogy miért nem villog a kurzor az event után.
else if (ofThisInput.selectionStart || ofThisInput.selectionStart == '0') {
theCursorLocation = ofThisInput.selectionStart;
}
return theCursorLocation;
}
var currentPos = theCursorPosition(theIdElement);
var origValue = theIdElement.value;
var newValue = origValue.substr(0, currentPos) + thisChar + origValue.substr(currentPos);
theIdElement.value = newValue;
document.getElementById(theIdElement).focus();
}
Tulajdonképpen működik, speciális karaktereket szúr be input mezőbe. A baj az, hogy nem jól kezeli a focus()-t. Az if (document.selection) résznél(?) elmászik.
Nem csak arról van szó, hogy szeretném a kurzort villogva látni, de van egy onBlur() eseményem ami ilyenkor mindig lefut (pedig nem kéne). Itt van a dolog gyakorlatban.
Így utólag belegondolva akkor az lehetett a te problémád, hogy a scripted előrébb volt, mint a babrálandó HTML elementek, így amikor a $('#qnEditForm')-ot hívtad, akkor az még nem volt meg, ezért nem találta. Így viszont még alternatív megoldásnak lehetett volna kisérletezni a script tag defer tulajdonságával is.
Köszönöm, megoldódott (thanks MerlinW@sg). Az egész $(document).ready()-be csomagolva máris működik.
$(document).ready(function() { $("#qnEditForm").change(function(){ var mand = $("input[name='mand']:checked").val(); if ( mand == 'y' ){ alert ( mand ); } }); });
Aztán leesett, hogy id nélkül macerás a másik radio-t visszakapcsolni, úgyhogy lett id, amivel sokkal egyszerűbb kódot lehet írni, itt a végső változat:
$(document).ready(function() { $('#mand1').change(function(){ // ha rákattint az igenre if ( !confirm ( 'Biztos vagy benne?' )){ // visszakérdezünk $('#mand2').prop('checked', 'checked' ); // ha nemet mond, visszaélesítjük a nemet } }); });
'reggelt! Ez miért nem működik, és hogy tudna mégis?
$('#qnEditForm').change(function(){ var mand = $('input[name=mand]:checked').val();
if ( mand == 'y' ){ alert ( mand );
} });
Van egy input type=radio, benne két option name=mand, az egyiknél value="n", a másiknál "y". Azt szeretném, hogy ha valaki az "y"-t választja, dobjon fel egy confirm-öt, hogy biztos akarja-e.
A rádióknak nincs saját ID-jük. Van nevük, de hiába írom úgy a kódot, hogy $(input[type=radio]) vagy $(input[name=mand]), change-re semmi sem történik, hibaüzenet sincs. Ha azt írom, hogy $(document).ready(...), akkor megvan az érték, de azzal nem sokra megyek, nekem a változtatáskori kell.
Az alert ( mand ) csak tesztből van ott, a confirm résszel még elboldogulok.
Sziasztok, látom nem nagyon aktíva fórum, de lenne újabb kérdésem.
Javascripttel/Jquery-vel (vagy ha tudtok jó libraryt, nekem az is jó) szeretnék mozgatni egy tárgyat a képernyőn a
szimpla WSAD billentyűkombinációkkal (ha lenyomom, akkor menjen, ha nem nyomom akkor ne menjen). Nyilván vannak a keydown keyup eventek, amikre szépen fel lehet iratkozni, de a probléma csak ezután jelentkezik.
Van az a windows-os jelenség, hogy ha leütünk egy billentyűt, akkor utána vár egy kicsit, és csak utána veszi be a leütést
sorozatosan egymás után. Ebből kifolyólag az elemem először egy kicsit megindul, vár, és utána kezd csak el az adott irányba
elmozdulni. Azt szeretném elintézni, hogy ha lenyomom a D-t akkor menjen jobbra, szépen rendesen ahogy kell neki.
amikkel eddig próbálkoztam:
-Jelenleg nem csinálok mást, csak a margin-left-jét növelem, ha keydown-t érzékel.
-A Position függvény nem jött be, mert azzal nem tudom elintézni, hogy simán menjen jobbra, az gyorsít, lassít,
szakaszosan veszi be az inputot stb (vagyis ugyanez a probléma ott is fennáll).
Ha persze be lehet ezt rendesen konfigurálni, hogy úgy működjön ahogy én akarom, az király lenne.
- Megpróbáltam, hogy setinterval-al csinálok egy végtelen ciklust, (setinterval nélkül si próbáltam magában az eseményben), ami ha érzékeli a rightDown globális változón, hogy true, akkor fut, ha nem true, akkor nem fut (a változó állítását nyilván a keydown, keyup eseményekkor állítom). A probléma a végtelen ciklusos megoldással az (azon felül hogy erőforrásigényes), hogy valamiért nem rajzolja
ki on the fly a képernyőre az eredményt, de ha beledebuggolok a végtelen ciklusba, akkor látom, hogy kiteszi (mintha nem lenne ideje
kirajzolni, mert időközben változik az értéke)--> (bár ezt cáfolja, hogy amikor a setintervalt 2 mp-re raktam, akkor se rajzolta).
Ha van valamilyen elfogadott kliensoldali módszer erre, légyszi segítsetek, mert tényleg sok időt belefeccöltem.
ui.: igyekszem kerülni a nagyon elborult javascript library-kat, mert csak a mozgatás miatt nem akarok behívni egy egész libraryt. (persze ha nincs más megoldás, akkor nyilván az is jó).