PS: Ich vermute mal, dass Du einfach die Standortabfrage gelöscht hast. Dann kann es nicht mehr funktionieren, denn die Funktion getWeather wird in setPosition aufgerufen und diese ist wieder ein Callback bei der Standortabfrage in Zeile 15. D. h. das einzige, was Du tun musst, ist die Funktion getWeather() am Ende des Skripts aufzurufen.
Beiträge von Sempervivum
-
-
Sieh genau hin, ich habe, um es leicht testen zu können, das Eintragen in die HTML-Elemente auskommentiert und die Daten statt dessen in die Console geschrieben:
Codefunction displayWeather() { console.log(weather); // iconElement.innerHTML = `<img src="icons/${weather.iconId}.png" />`; // tempElement.innerHTML = `${weather.temperature.value}°<span>C</span>`; }Wenn Du das wieder rückgängig machst, sollte es funktionieren:
-
Ich habe dein Skript mal auf das notwendigste reduziert und dann funktioniert es einwandfrei:
Code
Alles anzeigen<script> // App data const weather = {}; weather.temperature = { unit: "celsius" } // GET WEATHER FROM API PROVIDER function getWeather() { fetch(`http://api.openweathermap.org/data/2.5/weather?q=Recke,ger&appid=${"82005d27a116c2880c8f0fcb866998a0"}`) .then(function (response) { let data = response.json(); return data; }) .then(function (data) { weather.temperature.value = Math.floor(data.main.temp - 273); weather.description = data.weather[0].description; weather.iconId = data.weather[0].icon; weather.city = data.name; weather.country = data.sys.country; }) .then(function () { displayWeather(); }); } // DISPLAY WEATHER TO UI function displayWeather() { console.log(weather); // iconElement.innerHTML = `<img src="icons/${weather.iconId}.png" />`; // tempElement.innerHTML = `${weather.temperature.value}°<span>C</span>`; } getWeather(); </script>In deinem Skript ist jedoch die Standortabfrage noch drin. Soll das jetzt die Version vor oder nach dem Umbau sein?
-
Zitat
bei mir bremmst der eine irgendwie etwas langsamer ab
Das nennt man "easing" und ist auch bei Cycle2 vielfältig variierbar, auch mit langsamem Abbremsen.
-
Ich habe mal einen Prototypen gemacht, um den roten Balken in das SVG einzufügen:
Die Parameter werden aus dem vorhandenen SVG ausgelesen. Ist kein Label "2019-2020" da, wird auch kein Balken erzeugt.
Code
Alles anzeigenconst wRect = 10; const horizontalLines = $('svg').eq(0).children('g').eq(2).find('rect'), labels = $('svg').eq(0).children('g').eq(2).find('text'); let x = -1; labels.each(function (idx, item) { if (item.textContent == '2019/2020') x = parseInt(item.getAttribute('x')) - wRect / 2; }); if (x != -1) { const yTop = horizontalLines.eq(0).attr('y'), yBtm = horizontalLines.eq(horizontalLines.length - 1).attr('y'), height = yBtm - yTop; function makeSVG(tag, attrs) { var el = document.createElementNS('http://www.w3.org/2000/svg', tag); for (var k in attrs) el.setAttribute(k, attrs[k]); return el; } theRect = makeSVG('rect', { x: x, y: yTop, width: wRect, height: height, fill: '#ff0000' }); document.querySelectorAll('svg')[0].appendChild(theRect); }Funktioniert auf meiner Testseite; es muss dann noch in die originale Seite integriert werden.
-
Zitat
allerdings find ich leider die smoothen Übergänge bei meinem etwas schöner.....
Verstehe nicht: Die zweite Demo von links auf der Startseite von Cycle2 hat genau denselben Slide-Effekt wie bei der Demo von Basti.
-
Du wirst hier mit einem Nachteil von Slidern, die auf CSS basieren, konfrontiert: Die Erweiterung ist eine Qual und sehr fehleranfällig.
Zitatvielleicht hat ja jemand eine Idee oder Verbesserung.
Ja, habe ich: Einen bewährten Slider auf Javascript-Basis verwenden, wie z. B. Cycle2:
-
Zitat
vom Android her kenne ich die swipe-eigenschaften
Wenn ich mich richtig erinnere, ist Fancybox touch-ready und unterstützt swipe. Versuche es!
-
Was var, let und const betrifft, hast Du vollkommen Recht, ich hatte den Code von hier:
https://zellwk.com/blog/looping-through-js-objects/
und darauf nicht so geachtet.
Die Sache mit hasOwnProperty ist hier beschrieben:
-
PS: Jetzt getestet und war noch fehlerhaft. Die Funktion muss so aussehen:
-
Der Kern der Sache scheint mir dieses zu sein:
Ich vermute, Du willst die Einträge aus nameValue in die Felder unten übertragen. nameValue ist jedoch keine Funktion und die Anweisungen, die darin stehen, werden nicht ausgeführt durch nameValue[pos], sondern nur ein Mal, wenn Du diese Struktur definierst. Vermutlich würde dies tun, was Du vor hast:
Code
Alles anzeigenconst nameValue = { knightsvalue: { hp: 1520472, Atk: 17632, // ebenso alle weiteren Eintraege aendern document.getElementById('P_Def').innerText = 7832, document.getElementById('M_Def').innerText = 6096, document.getElementById('Mp_Recovery_Atk').innerText = 210, document.getElementById('Crit').innerText = 150, document.getElementById('Acc').innerText = 100, document.getElementById('Cc_Resist').innerText = 150, document.getElementById('Penetration').innerText = 150, document.getElementById('P_Dodge').innerText = 250, document.getElementById('M_Dodge').innerText = 250, document.getElementById('Atk_Speed').innerText = 1000 }, warriorsvalue: { // alle Elemente wie oben aendern document.getElementById('Hp').innerText = 1291376, document.getElementById('Atk').innerText = 20032, document.getElementById('P_Def').innerText = 6528, document.getElementById('M_Def').innerText = 7832, document.getElementById('Mp_Recovery_Atk').innerText = 235, document.getElementById('Acc').innerText = 100, document.getElementById('Crit').innerText = 150, document.getElementById('Penetration').innerText = 150, document.getElementById('P_Dodge').innerText = 100, document.getElementById('M_Dodge').innerText = 100, document.getElementById('Atk_Speed').innerText = 1000, document.getElementById('Cc_Resist').innerText = 150 }, };Und dann in der Funktion:
Code
Alles anzeigenfunction statsValue(pos) { //nameValue[pos]; var obj = nameValue[pos] for (var property in obj) { if (obj.hasOwnProperty(property)) { document.getElementById(property).innerText = obj[property]; } } console.log('2'); console.log(pos); };Ungetestet, versuche es mal so.
-
Möglicher Weise bindest Du irgend welche Dateien ein, CSS oder JS oder PHP durch include und die Pfade passen dann nicht mehr. Wenn Du es online hast, dann poste die URL. Möglicher Weise gibt auch die Console Hinweise, was falsch läuft.
-
Ob und wo die Console in Sublime zu finden ist, weiß ich leider nicht. In jedem Fall findest Du sie aber in deinem Browser: F12 in IE und Edge, Strg+Umsch+I in den anderen.
ZitatBzw weiß nicht, ob es ratsam ist, auf eine externe Lösung zurückzugreifen.
Was meinst Du damit?
-
Die Console zeigt dir an, wo das Problem liegt: Zeile 2 des Javascript sieht so aus:
const totalQuestionSpan==document.querySelector(".total-question");
Da hast Du ein doppeltes statt einem einfachen Gleichheitszeichen.
-
Du willst doch zwei Dateien haben, in denen das HTML für body steht, body.php und body_mobile.php. Dann bindest Du in body.php die header_web und in body_mobile.php die header_mobile ein.
-
Denke schon, dass Du das richtig verstehst. querySelectorAll liefert eine Nodelist, das ist im wesentlichen ein Array und im Clickhandler liefert this das geklickte Element. Und innerText dann den Text des div.
-
-
Dein Code sieht ja so aus:
Code
Alles anzeigenvar btnClick = function(){ const output = document.getElementById('ausgabe'); //let nodeItem = elem.item(index) const test = document.querySelector('.btn') output.innerText = 'Klick: ' + this.innerText; }; document.querySelectorAll('.btn').forEach( function (elem, index) { elem.addEventListener('click', btnClick); });Wenn Du elem und index an die Funktion btnClick übergeben willst, kannst Du diese Funktion nicht als Referenz übergeben sondern musst die Parameter explizit übergeben:
Code
Alles anzeigenvar btnClick = function(elem, index){ const output = document.getElementById('ausgabe'); //let nodeItem = elem.item(index) //const test = document.querySelector('.btn') output.innerText = 'Klick: ' + elem.innerText; }; document.querySelectorAll('.btn').forEach( function (elem, index) { elem.addEventListener('click', function() { btnClick(elem, index); }); });Wenn Du die Funktion als Referenz übergibst, hast Du jedoch Zugriff auf den geklickten button über this :
Code
Alles anzeigenvar btnClick = function(){ const output = document.getElementById('ausgabe'); //let nodeItem = elem.item(index) //const test = document.querySelector('.btn') //Unter this hast Du Zugriff auf den Button, der geklickt wurde: output.innerText = 'Klick: ' + this.innerText; }; document.querySelectorAll('.btn').forEach( function (elem, index) { elem.addEventListener('click', btnClick); }); -
Der Validator beanstandet es nicht, wenn Leerzeichen um die Tilde herum sind und auch meinen Browser (Opera) stört es nicht.
-
Zitat
dass das Feld NAME doch Zahlen durchgehen lässt, obwohl ich mit preg_matsch nur Buchstaben zulasse
"/^[a-zA-Z äöüßáéíóú]/"
Das liegt daran, dass Du nicht bis zum Stringende prüfst, so wird nur das erste Zeichen gecheckt. Dies sollte funktionieren: "/^[a-zA-Z äöüßáéíóú]+$/"