- Gurulunk, WAZE?!
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Kempingezés és sátrazás
- gban: Ingyen kellene, de tegnapra
- Viber: ingyen telefonálás a mobilodon
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Magga: PLEX: multimédia az egész lakásban
- Ivqkzy-: Eddig
-
LOGOUT
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Dinter
addikt
Végül a Katalon Recorder (Selenium IDE) lett a megoldás. Igen, kellett kicsit szenvedni vele, hogy változnak a gombok nevei, de végül sikerült. A csv-t pedig fel lehet tölteni egy "Data driven" fülön belül, onnan berakosgatja.
Egyetlen probléma, hogy kicsit lassabb, mert max sebességen nem tudom futtatni, mert ugye mentés után kell egy 0.5s meg amíg a mentés gomb kattinthatóvá válik, így kb 10 mp felvinni 1-et.
-
Jim-Y
veterán
-
martonx
veterán
"A rendező kód akor futna le, amikor az összes kép betöltődött, ezáltal tudjuk már a dimenzióit."
Ezen elgondolkoztam, hogy biztos ez a jó megoldás? Miért nem küldöd ki első körben a képek dimenzióit, url-jét, majd azt beillesztve a megfelelő helyekre, szépen lejönnének a képek, mindegyik pont a helyére. -
Jim-Y
veterán
Szia, kevéssé világos ennyiből, hogy pontosan mit szeretnél elérni, de használhatsz egy modulra/függvényre globális jelölőt (flaget) amit akkor billentesz át, ha minden betöltődött.
Egy másik megközelítés, vagy a fenti megközelítés kiterjesztése, ha reaktívan gondolkozol. Ez nagyjából azt jelentené, hogy akik/amik érdekeltek az összes kép betöltődésében, azok beregisztrálnak egy callbacket például az "összes kép betöltődött" eseményre. Ebben az a jó, hogy az a modul amelyik a betöltést végzi csak gyengén lesz csatolva azokhoz amelyek a betöltődést figyelik.
Vagy használhatod az "alap" megoldást, és callbackeket hívsz meg ha az összes kép betöltődött.
Ezeket itt szemléltetem. http://jsfiddle.net/ygvvs0sm/
Egyiket sem próbáltam ki, így kezeld őket pseudokódokként. üdv
-
Jim-Y
veterán
Szia.
Sajnos még mindig nem értek a canvas-hoz, így megint csak a kódodról fogok beszélni.
> Remélem, nem "csúnya" nagyon a kódom.
Nem fogok kertelni, szerintem nem fogod magadra venni, nem is azért írom, de... igen az, sajnos elég csúnya
Na persze ez nem gond! Tényleg nem. Egyrészt mert mindenki kezdi valahol, másrészt meg az látszik, hogy más múltad van. Szépen nem így irunk JavaScript kódot.Ezekkel van probléma benne:
var betolt = function(i,b,a)
{
imageObj[i].onload = function ()
{
ctx.drawImage(imageObj[i], b, 0, d, a);
};
};i, b, a -> ezek a formális változónevek egész egyszerűen rosszak, sosem adunk egybetűs váltzóneveket!
Nem tudni, hogy mit jelölnek. i az vajon index, a b meg a, na erre még tippe sincs az embernek. Nincs overhead akkor sem, ha 1 betű helyett 20 hosszú változó neveket használsz, cserébe értelmes lesz a kód. Ennek azért van jelentősége, mert
1: egy cégnél nem csak te fogod a kódodat olvasni, hanem előbb utóbb más is. És kontextus nélkül ezek a nevek konkrétan hátráltatják más munkáját, az idő pénz, tehát az ilyen nevek használatával pénz deficit keletkezik (lol). Komolyra fordítva a szót, tényleg más is akarja még olvasni a kódod, ne adj isten módosítani, olyankor jól jön ha "self-descriptive" a kódod.
2: JS-ben gyakran végzünk minifikálást, ami az egyik állomása a buildelésnek, így nem kell figyelni arra, hogy minél tömörebb legyen a kód, a végtermék úgyis tömör lesz.
Példa: még ennél a minimalista példánál is látszik, bár mondanom sem kell, hogy értelmesebb kódnál jobban kijön a minifikálás "előnye"Before (tordeltem):
var myOwnImageObject = [];
function imageLoading(indexVar, someOtherVarWhichHasADescriptiveName, anotherFormalParam) {
myOwnImageObject[indexVar].onload = function() {
context.drawImage(
myOwnImageObject[indexVar],
someOtherVarWhichHasADescriptiveName,
0,
wut,
anotherFormalParam
);
};
}After:
function imageLoading(n,a,e){myOwnImageObject[n].onload=function(){context.drawImage(myOwnImageObject[n],a,0,wut,e)}}var myOwnImageObject=[];Tehát nincs igazán érv az egybetűs változónevek mellett.
3:
Nem túl jó kódod stílusa. Gondolom C++-ból jöttél át, legalábbis én úgy tudom, hogy ott szoktak K&R style -t használni. Ez az automatikus pontosvessző , áhh inkább írom angolul úgyis úgy tudsz rákeresni: automatic semicolon insertion miatt nem ajánlott így kódolni JavaScriptben. Nagyon sok verzió létezik, én leginkább az airbnb-hez tartom magam. Számomra ez eredményezi a leginkább olvasható, karbantartható kódot. Tehát ha az airbnb szerint írjuk a kódodat, akkor valahogy így nézne ki (ha én írnám akkor is):var c = document.getElementById("myCanvas"),
ctx = c.getContext("2d"),
files = document.getElementById("files-upload").files,
imageObj = [],
a = (1920 - (files.length - 1)) / (files.length);
function betolt(i, b, a) {
imageObj[i].onload = function() {
ctx.drawImage(imageObj[i], b, 0, d, a);
};
}
for (var i = 0, len = files.length; i < len; ++i) {
b = (a + 1) * i;
imageObj[i] = new Image();
imageObj[i].src = "útvonal" + files[i].name;
betolt(i, b, a);
}4:
Az a változót tudatosan, vagy sem, de globális scope-ba helyezted, ez rossz szokás, abszolút kerülendő.5:
ez inkább jó tanács: JSHint vagy egyéb linter toolok használata javallott. Szinte minden Editorhoz, IDE-hez létezik már plugin.Üdv
-
Jim-Y
veterán
Szia
1: ... = Array; Ehelyett inkabb ... = [] az ajanlott. [link]
2: ne tegyel semmit kulon fuggvenybe, ahogy fordfairlane is irta, a closure nem tartalmazza az i valtozodat, itt egy (ROSSZ) pelda, ez tortenik most a kododban.
http://jsfiddle.net/Jim_Y/6vy2x7Lo/1/
Latszik, hogy 10x "10" irodik ki a kepernyore, tehat ha lebontjuk, akkor
ctx.drawImage(imageObj[10], b, 0, a, 1080);
ctx.drawImage(imageObj[10], b, 0, a, 1080);
ctx.drawImage(imageObj[10], b, 0, a, 1080);
ctx.drawImage(imageObj[10], b, 0, a, 1080);
...stb tortenikEz azert van, mert az onload fuggveny egy closure-t kepez az ot korulolelo fuggvennyel, ami azt jelenti, hogy amikor az onload fv. lefut, akkor mindig megnezni a runtime, hogy az aktualis kontextusban mi az i valtozo erteke. Mivel az onload aszinkron, ezert amikor azok lefutnak, addigra a ciklus mar vegzett, es az i ciklusvaltozo erteket 10-re novelte. Abban a pillanatban ahogy az onload lookup-olja az i-t, az mar 10-es ertekkel szerepel a kontextusban. Ezert lesz 10x"10" kiirva a konzolra.
Ennek megoldasa, egy uj Execution Context (~ uj variable environment, ~closure) letrehozasaval orvosolhato, amiben az i valtozo mindig az eppen aktualis ertekre lesz beallitva, igy amikor az onload (lookup i) tortenik, akkor az aktualis environment context-ben az i jo ertekkel fog szerepelni.
KetHarom pelda:1: http://jsfiddle.net/Jim_Y/6vy2x7Lo/2/ reading Function.prototype.bind
2: http://jsfiddle.net/Jim_Y/6vy2x7Lo/3/ reading closures
3: http://jsfiddle.net/Jim_Y/6vy2x7Lo/4/ reading IIFE3: Az onload aszinkron muvelet, ami a ciklus lefutasa utan fog csak meghivodni.
Itt egy szemlelteto pelda http://jsfiddle.net/Jim_Y/LsuLL7dg/1/
A kodban a setTimeout az onload-ot szemlelteti. Latszik, hogy amit azon kivul csinalsz, az elobb fut le, mint amit azon belul.
Udv
-
sztanozs
veterán
Azt írja, hogy a drawImage függvény szignatúrája nem jó...
Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': No function was found that matched the signature providedJa nem - [link]
Note If you're specifying an image, be sure the image content has loaded fully if you're calculating the width and height of the img tag. -
cucka
addikt
Én meg a Tiédet nem értem, de utánanézek a w3schools-on, hogy értsem is.
Pedig nagyon egyszerű. A függvény hívást az űrlapelem onkeyup és onchange eseményére kötöm rá. Az első akkor fut le, ha begépelsz 1 betűt (és felengeded a billentyűt), a másik meg akkor, ha mondjuk bemásolsz valami szöveget az űrlap elembe vagy simán csak elveszti a fókuszt. Pareméterként az űrlap elem objektumát adom át, így a szövegmanipulálásnál egyből tudom, hogy melyik űrlapelem eseménye hívta meg a függvényemet. Ezzel egyrészt megspórolom a DOM-ban való turkálást, másrészt a függvénynek így teljesen mindegy lesz, hogy melyik input-nak az értékét kell módosítsa.A függvényben egy egyszerű reguláris kifejezéssel működő betűcsere van. A reguláris kifejezés mindenre karakterre match-el, ami nem a-z közötti betű. A reg. kifejezés végén a g kapcsoló mondja meg, hogy ne csak az első előfordulást cserélje, az i kapcsoló meg azt, hogy a kis-nagybetűk közötti különbséget ne vegye figyelembe. A replace második paramétere az üres string, erre cserélünk minden olyan karakter, amire ráillik a pattern-ünk.
-
cucka
addikt
A kódodat nem nagyon értem, de ha ilyen hosszú, akkor már régen rossz.
Például itt egy javascript függvény, ez azt csinálja, amit szeretnél:
function strip_nonalpha(p_sender){
p_sender.value=p_sender.value.replace(/[^a-z]/gi,'');
}És a hozzá tartozó ürlapelem:
<input type="text" name="szoveg" value="" onkeyup="strip_nonalpha(this);" onchange="strip_nonalpha(this);">
-
cucka
addikt
Bármelyik javascript tutorial megfelel, a feladathoz semmilyen extra dolgot nem kell használni. W3Schools-os javascript leírást ajánlom, de lehet, van könnyebben olvasható is a neten.
Nem csak az érdekel, hogy hog ylehet megcsinálni, hanem hogy hogy érdemes.
Ennél a feladatnál a józan észt leszámítva nagy trükköt nem tudsz bevetni, cserébe jó hosszú lesz a kódod.azt már tudom, hogy az "onSubmit" fv.-nyel kell megoldani.
Az onsubmit alapvetően nem függvény, hanem egy esemény, ami akkor hívódik meg, amikor az adott űrlapot elküldöd. (Nyilván, az onsubmit esemény értéke egy függvény).
A különféle ellenőrzéseket /extrákat rákötheted még az űrlap elemek onfocus és onblur eseményeire, ízlés szerint. Az onfocus akkor fut le, amikor az űrlap elem aktív lesz (pl. ráklikkelsz, rámész tabulátorral), az onblur pedig amikor inaktív lesz. Továbbá kisérletezhetsz az onchange eseménnyel is, ez akkor fut le, ha változik az űrlapelem értéke, vagy elveszíti a fókuszt. (Utóbbiban nem vagyok 100%ig biztos). Ezt úgy értsd, hogy pl. egy szövegdoboznál minden egyes betű beírásakor/törlésekor le fog futni. Pl. jelszó beírásnál ezzel tudod látványosan ellenőrizni, hogy elég hosszú-e a jelszó.
(alapból piros x mellette, onchange-nél meg adott feltételek esetén lecseréled zöld pipára vagy visszacseréled piros x-re)
Új hozzászólás Aktív témák
Hirdetés
- Gurulunk, WAZE?!
- Kormányok / autós szimulátorok topikja
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen okostelefont vegyek?
- DUNE médialejátszók topicja
- eSIM, a kártyamentes szabadság
- Kertészet, mezőgazdaság topik
- EAFC 25
- Kazy Computers - Fehérvár - Megbízható?
- További aktív témák...
- Topping D30 Pro (ezüst) eladó
- ! AMD Brutál Gamer Konfig ! 9800X3D / 7900XTX ( RITKASÁG ) 32Gb RAM 32Colos ROG Monitor
- Gamer Billentyűzet Akció ! Steelseries, Razer, Logitech, Corsair - Számlával, Garanciával, Ár alatt!
- Újszerű Lenovo,15,6"FullHd IPS,Ryzen 5(8x3,7Ghz)VEGA 8 VGA,12-20GB RAM,SSD+HDD
- Hálózati rendszermérnök és IT rendszerüzemeltetés
- Dell USB-C dokkolók: (K20A) WD19/ WD19S/ WD19DC + 130W, 180W, 240W töltők
- AKCÓÓÓ!!! Panasonic CF-XZ6 AIO all-in-one laptop tablet 2k touch i5-7300u speciális ütésálló
- AKCIÓ! AMD Ryzen 9 3900X 12 mag 24 szál processzor garanciával hibátlan működéssel
- ÁRGARANCIA!Épített KomPhone Ryzen 5 4500 16/32/64GB RAM RX 6500 XT 4GB GAMER PC termékbeszámítással
- ÁRGARANCIA!Épített KomPhone i5 14600KF 16/32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged