- 200 milliárd dollárt önt a memóriagyártásba a Micron
- Elképesztő mértékben tömörítenék be a nagy nyelvi modelleket
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Atomenergiával dübörögnek tovább az Amazon adatközpontok, SMR-ek is jöhetnek
- Macron betiltatná az EU-ban a közösségi médiát a 15 év alattiaknak
- Everest / AIDA64 topik
- AMD Navi Radeon™ RX 9xxx sorozat
- Nvidia GPU-k jövője - amit tudni vélünk
- Milyen billentyűzetet vegyek?
- 3DMark (2013) eredmények
- CPU léghűtés kibeszélő
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Fujifilm X
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Ez már a középkategória: teszten a GeForce RTX 5070
-
PROHARDVER!
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
- Everest / AIDA64 topik
- sh4d0w: Csak a profit - emberélet nem számít
- Szeged és környéke adok-veszek-beszélgetek
- AMD Navi Radeon™ RX 9xxx sorozat
- Linux kezdőknek
- Formula-1
- Kazy Computers - Fehérvár - Megbízható?
- Renault, Dacia topik
- Bemutatkozott a Poco X7 és X7 Pro
- Álláskeresés, interjú, önéletrajz
- További aktív témák...
- Fujitsu AKCIÓ!!! 14,1"-15,6"FullHD IPS,8.gen.i5,10.gen.i5
- HP Elitebook 840 G3 laptop (14FHD/I5-G6/8GB/256SSD/Matricázott) - Akku X
- Asus Rog Strix Gamer laptop makulátlan állapotban
- ThinkPad T14 Gen4 14" FHD+ IPS érintő Ryzen 5 PRO 7540U 16GB 256GB NVMe ujjlolv IR kam gar
- 16GB-os SODIMM (notebook) DDR4 RAM bazár - nézz be, lesz, ami kell neked!
- BESZÁMÍTÁS! ASUS Z97-A Z97 chipset alaplap garanciával hibátlan működéssel
- Telefon felvásárlás!! iPhone 12 Mini/iPhone 12/iPhone 12 Pro/iPhone 12 Pro Max
- ÁRGARANCIA!Épített KomPhone i3 10105F 16/32/64GB RAM RTX 3050 6GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! Samsung Galaxy A20e/Samsung Galaxy A40/Samsung Galaxy A04s/Samsung Galaxy A03s
- MacBook felvásárlás!! Macbook, Macbook Air, Macbook Pro
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged