Zitatmüsste wenn man Blau mit weiss mischt nicht hellblau rauskommen
Das stimmt natürlich. Muss ich mir mal ansehen ...
Zitatmüsste wenn man Blau mit weiss mischt nicht hellblau rauskommen
Das stimmt natürlich. Muss ich mir mal ansehen ...
Das ist in der Tat ziemlich ineffizient:
1. Mit setPixels kann man das ganze Bild auf einmal abarbeiten. Ruft man setPixels für jedes Pixel auf mit width:1 und height:1 wird das Bild bei jedem Aufruf mit getImageData aus dem Canvas gelesen und mit putImageData zurück geschrieben.
2. Die RGB-Werte kann man in Variablen führen. Andernfalls muss für jedes Pixel der RGB-Wert aus dem Localstorage gelesen und zurück geschrieben werden.
Ich schlage dieses vor:
<canvas id="avgcolor"></canvas>
<script>
var cv = $("#avgcolor");
var im = new Image();
im.onload = function () {
var width = this.width, height = this.height;
console.log(width, height);
cv.attr("width", width).attr("height", height + 100);
cv.drawImage({
layer: true,
source: im.src,
x: 0, y: 0,
fromCenter: false,
load: function () {
var sumr = 0, sumg = 0, sumb = 0;
cv.setPixels({
x: 0, y: 0,
width: width, height: height,
each: function (px) {
sumr += px.r;
sumg += px.g;
sumb += px.b;
}
});
var nrpx = width * height;
var avgr = Math.floor(sumr / nrpx),
avgg = Math.floor(sumg / nrpx),
avgb = Math.floor(sumb / nrpx);
console.log(avgr, avgg, avgb);
cv.drawRect({
width: 100, height: 100,
x: 0, y: height,
fromCenter: false,
fillStyle: "rgb(" + avgr + "," + avgg + "," + avgb +")"
})
}
});
}
im.src = "images/bg_sprite.png";
</script>
Alles anzeigen
Getestet hatte ich das auch mit dem Ergenis, dass nur die Funktion aufgerufen wurde, die als erstes dem Event zugwiesen wurde.
Vor allem zunächst auf absolute Positionierung verzichten und ja, die Größe in Prozent zu definieren ist ebenfalls schon ein guter Ansatz. Poste doch mal das HTML, CSS und JS, möglicher Weise als ZIP-Datei oder die URL der Seite, falls sie online ist. Es geht ja hier um die Darstellung und die Dynamik der Balken braucht dafür nicht zu funktionieren.
Den Kern der Sache, nämlich die Funktion AN() finde ich nicht in dem Code, den Du gepostet hast. Hast Du das soweit selbst entwickelt oder von irgendwoher übernommen?
Wenn ich mich richtig erinnere, waren das dynamische Balken, die mit Canvas und jCanvas gezeichnet werden. Ich habe mir jetzt nicht die Mühe gemacht, die Threads heraus zu suchen.
Diese Frage wird häufig gepostet und das Problem ist vielschichtig und schwer in wenigen Sätzen zu beantworten. Generell kann man jedoch sagen, dass absolute Positionierung der Feind eines responsiven Layouts ist, wo sich die Elemente dynamisch an die Bildschirmabmessungen anpassen. Besser andere Layoutmöglichkeiten verwenden.
Wahrscheinlich brauchst Du dafür kein try/catch. Das Handbuch sagt:
ZitatIm Fehlerfall gibt file_get_contents()
FALSEzurück.
Du kannst es jedoch so machen wie die echte Fancybox und den Inhalt (.fancybox-inner) parallel zum Hintergrund (.fancybox-g) anlegen anstatt als Kindelement:
Muss denn die Funktion addNewBird an die Suche gebunden sein? Einfacher wäre es, wenn Du sie dort definieren würdest, wo die Liste aufgebaut wird und wo der Listener registriert werden muss.
Oh, das tut mir Leid! Ich wollte dich nicht angreifen. Hatte vermutet, dass das ein Muster ist, das von der Aufgabe vorgegeben wurde. Weil Du in anderem Zusammenhang mal geschrieben hattest, dass Du etwas nicht anwenden kannst, weil die Aufgabe es anders verlangt.
Und da heißt es immer, OOP verbessere die Wartbarkeit und Änderungsfreundlichkeit oder stelle sie gar sicher. Beides setzt Lesbarkeit voraus aber hier sucht man sich ja dumm und dämlich, bis man etwas gefunden hat.
Das Problem scheint mir hier zu sein:
function birdSearch(){
searchWord = controller.getSearchString();
ul = theList;
li = ul.getElementsByTagName("li");
for (i = 0; i < li.length; i++) {
birdName = li[i].getElementsByClassName("bird-name")[0].innerHTML.toLocaleLowerCase();
birdAddButton = li[i].getElementsByClassName("add-bird-button")[0];
birdAddButton.addEventListener("click", addNewBird);
if (birdName.includes(searchWord)) {
li[i].style.display = "";
} else {
li[i].style.display = "none";
}
}}
Alles anzeigen
Diese Funktion wird jedes Mal aufgerufen, wenn sich im Eingabefeld etwas ändert. Und jedes Mal wird der Eventlistener mit addNewBird hinzugefügt. Du darfst diesen Listener nur einmal hinzu fügen, wenn Du die Liste anlegst.
Der Debugger bringt es an den Tag: Der Eventlistener für den Plus-Button wird mehrfach aufgerufen. Überprüfe die birds-list, ob Du den Listener mehrfach registrierst.
Und was soll dann passieren? Das Element soll irgend wo dazu gefügt werden? Zu der bird-list? Die ist doch schon fertig?
Zitatdrauf clicken und diesen Element auf ein List hinzufügen.
Suchfunktion funktioniert. Wo drauf klicken? Auf das + Zeichen oder das ganze Feld?
Und in welcher JS-Datei findet man den Code, den Du oben gepostet hast?
Am besten wäre es, wenn man das im Zusammenhang sehen könnte. Mach doch eine ZIP-Datei mit der HTML- und den JS-Dateien und poste sie als Anhang. Bilder kannst Du weg lassen, weil sonst die Datei u. U. zu groß wird.
Zitatdas Problem jetzt ist dass beim zweiten Auswahl 2 Elemente auf die liste hinzugefügt werden und beim dritten dann 3 usw.
Das liegt daran, dass Du jedes Mal ein Element zu birdChose hinzu fügst:
Wenn Du das Plus weg nimmst, sollte es funktionieren:
Ich habe mal das Problem auf das wesentliche reduziert und in eine Testseite eingefügthtml-seminar.de/woltlab/attachment/1349/
So sieht die Ansicht im HTML-Inspektor aus. Man erkennt, dass das n1 nicht von Hochkommas eingeschlossen ist. Daher interpretiert Javascript es als Variable, die es nicht findet. Ändert man es so:
AuswahlFeld.innerHTML = "<p onclick='ClosePopUp(\"AuswahlFeldHintergrund\")'>X</p><form method='post' action='test.php' >" + content + "</br></br><button onclick='AddRadioValueTOCheckbox(\"" + feld + "\"," + RadioValue + ")' name='submitAuswahlFeld' type='button'>OK</button><form></br>";
funktioniert es.
Einige der anderen Punkte, die Basti genannt hat, sind mir auch aufgefallen.
Am einfachsten: URL https://code.jquery.com/jquery-1.12.4.js im Browser öffnen, dann wird das Javascript angezeigt. Dann mit "Seite - Speichern unter" o. ä., je nach Browser, speichern.
HTML-Seminar.de - mit Videos zum schnellen Lernen, wie man eine Website selbst erstellt.