NEWS
Rssfeed geordnet anzeigen lassen
-
Du hast da schon gute viel arbeit reingesteckt, und vorallen mit den vorlagen finde ich das super.
-
ah okay, ich habe den Code generieren lassen von KI, möchtest du dir den neuen Code mal ansehen, bzw. mal drüber fliegen ob der so okay ist ?
-
<style> #rss_container_<%- widgetid %> { height: 100%; width: 100%; display: flex; flex-direction: column; } #rss_container_<%- widgetid %> .slide { display: none; padding: 10px; } #rss_container_<%- widgetid %> .active { display: block; animation: fadeRss 0.5s; } @keyframes fadeRss { from { opacity: 0; } to { opacity: 1; } } </style> <div id="rss_container_<%- widgetid %>"> <div class="rss_content" style="flex: 1; overflow: auto;"> <% if (rss && rss.articles) { %> <% rss.articles.forEach(function(item, index){ %> <div class="slide <%- index === 0 ? 'active' : '' %>"> <small><%- vis.formatDate(item.pubdate, "DD.MM.YYYY HH:mm") %></small> <h3 style="margin: 8px 0;"><%- item.title %></h3> <div><%- item.description %></div> </div> <% }); %> <% } %> </div> </div> <script> (function() { // Wir suchen das Element direkt über die Widget-ID, die VIS übergibt var parentId = 'rss_container_<%- widgetid %>'; var container = document.getElementById(parentId); if (!container) return; var slides = container.getElementsByClassName('slide'); var currentIndex = 0; var intervalTime = 10000; // 5 Sekunden if (slides.length > 1) { setInterval(function() { // Aktuellen Slide ausblenden slides[currentIndex].classList.remove('active'); // Index erhöhen currentIndex++; if (currentIndex >= slides.length) { currentIndex = 0; } // Nächsten Slide einblenden slides[currentIndex].classList.add('active'); }, intervalTime); } })(); </script> -
jetzt müsste es richtig sein
-
jetzt müsste es richtig sein
ich teste hier mit dem tagesschau rss.
da ist ein bild drin, dessen größe korrigiert werden muss<style> #rss_container_<%- widgetid %> { height: 100%; width: 100%; display: flex; flex-direction: column; } #rss_container_<%- widgetid %> .slide { display: none; padding: 10px; } #rss_container_<%- widgetid %> .active { display: block; animation: fadeRss 0.5s; } #rss_container_<%- widgetid %> img { width: calc(<%- style.width %> - 15px); height: auto; } @keyframes fadeRss { from { opacity: 0; } to { opacity: 1; } } </style> <div id="rss_container_<%- widgetid %>"> <div class="rss_content" style="flex: 1; overflow: auto;"> <% if (rss && rss.articles) { %> <% rss.articles.forEach(function(item, index){ %> <div class="slide <%- index === 0 ? 'active' : '' %>"> <small><%- vis.formatDate(item.pubdate, "DD.MM.YYYY HH:mm") %></small> <h3 style="margin: 8px 0;"><%- item.title %></h3> <div><%- item.description %></div> </div> <% }); %> <% } %> </div> </div> <script> (function() { // Wir suchen das Element direkt über die Widget-ID, die VIS übergibt var parentId = 'rss_container_<%- widgetid %>'; var container = document.getElementById(parentId); if (!container) return; var slides = container.getElementsByClassName('slide'); var currentIndex = 0; var intervalTime = 10000; // 5 Sekunden if (slides.length > 1) { setInterval(function() { // Aktuellen Slide ausblenden slides[currentIndex].classList.remove('active'); // Index erhöhen currentIndex++; if (currentIndex >= slides.length) { currentIndex = 0; } // Nächsten Slide einblenden slides[currentIndex].classList.add('active'); }, intervalTime); } })(); </script> -
aber sonst ist der ist das Skript brauchbar oder ?
-
ich teste hier mit dem tagesschau rss.
da ist ein bild drin, dessen größe korrigiert werden muss<style> #rss_container_<%- widgetid %> { height: 100%; width: 100%; display: flex; flex-direction: column; } #rss_container_<%- widgetid %> .slide { display: none; padding: 10px; } #rss_container_<%- widgetid %> .active { display: block; animation: fadeRss 0.5s; } #rss_container_<%- widgetid %> img { width: calc(<%- style.width %> - 15px); height: auto; } @keyframes fadeRss { from { opacity: 0; } to { opacity: 1; } } </style> <div id="rss_container_<%- widgetid %>"> <div class="rss_content" style="flex: 1; overflow: auto;"> <% if (rss && rss.articles) { %> <% rss.articles.forEach(function(item, index){ %> <div class="slide <%- index === 0 ? 'active' : '' %>"> <small><%- vis.formatDate(item.pubdate, "DD.MM.YYYY HH:mm") %></small> <h3 style="margin: 8px 0;"><%- item.title %></h3> <div><%- item.description %></div> </div> <% }); %> <% } %> </div> </div> <script> (function() { // Wir suchen das Element direkt über die Widget-ID, die VIS übergibt var parentId = 'rss_container_<%- widgetid %>'; var container = document.getElementById(parentId); if (!container) return; var slides = container.getElementsByClassName('slide'); var currentIndex = 0; var intervalTime = 10000; // 5 Sekunden if (slides.length > 1) { setInterval(function() { // Aktuellen Slide ausblenden slides[currentIndex].classList.remove('active'); // Index erhöhen currentIndex++; if (currentIndex >= slides.length) { currentIndex = 0; } // Nächsten Slide einblenden slides[currentIndex].classList.add('active'); }, intervalTime); } })(); </script>evtl noch eine anmerkung zum setInterval.
Es ist besser, insbesondere hier, den setInterval Teil in eine eigene Funktion zu setzen
Die Funktion ruft dann die eigene Funktion wieder mit setTimeout wieder auf.So wie es jetzt ist, wird es irgendwann zu Speicherprobleme führen.
Jedesmal wenn der RSS Datenpunkt aktualisiert wird, wird der widgetinhalt ersetzt.
Allerdings wird dadurch der alte setInterval Aufruf nicht entfernt. Mit dem Austausch kommt dann aber ein neuer setInterval dazu.Jetzt kannst du dir evtl vorstellen was passiert, wenn 10 mal der datenpunkt aktualisiert wurde. Dann versuchen 10 parallele setInterval Aufrufe geichzeitig den Artikel zu wechseln.
Sag der KI, sie soll den Code mit setTimeout formulieren um evtl Speicherprobleme zu verhindern.
Anonsten ist der Code OK
Es fehlen nun die Knöpfe, so ist man auf den automatismus angewiesen, auch wenn der angezeigte Artikel gerade nicht interessiert
Wenn du aber eine möglichst cleane Darstellung haben willst ist das OK -
Ich habe das jetzt nochmal mit setTimeout durch die KI überarbeiten lassen, schaue mal bitte drüber
-
<style> #rss_wrapper_<%- widgetid %> { height: 100%; width: 100%; overflow: hidden; } #rss_wrapper_<%- widgetid %> .slide { display: none; padding: 10px; } #rss_wrapper_<%- widgetid %> .active { display: block; animation: fadeInRSS 0.6s ease-in-out; } @keyframes fadeInRSS { from { opacity: 0; } to { opacity: 1; } } </style> <div id="rss_wrapper_<%- widgetid %>"> <% if (rss && rss.articles && rss.articles.length > 0) { %> <% rss.articles.forEach(function(item, index){ %> <div class="slide <%- index === 0 ? 'active' : '' %>"> <small><%- vis.formatDate(item.pubdate, "DD.MM.YYYY HH:mm") %></small> <h3 style="margin: 8px 0;"><%- item.title %></h3> <div class="rss-desc"><%- item.description %></div> </div> <% }); %> <% } else { %> <p>Lade Feeds...</p> <% } %> </div> <script> (function() { // Das setTimeout sorgt dafür, dass VIS Zeit zum Rendern hat setTimeout(function() { var containerId = 'rss_wrapper_<%- widgetid %>'; var root = document.getElementById(containerId); if (!root) return; var slides = root.getElementsByClassName('slide'); var current = 0; var pause = 5000; // 5 Sekunden pro Artikel if (slides.length > 1) { setInterval(function() { // Alten Slide verstecken slides[current].classList.remove('active'); // Index weiterzählen current = (current + 1) % slides.length; // Neuen Slide zeigen slides[current].classList.add('active'); }, pause); } }, 1500); // 1,5 Sekunden Verzögerung beim Start })(); </script> -
<style> #rss_wrapper_<%- widgetid %> { height: 100%; width: 100%; overflow: hidden; } #rss_wrapper_<%- widgetid %> .slide { display: none; padding: 10px; } #rss_wrapper_<%- widgetid %> .active { display: block; animation: fadeInRSS 0.6s ease-in-out; } @keyframes fadeInRSS { from { opacity: 0; } to { opacity: 1; } } </style> <div id="rss_wrapper_<%- widgetid %>"> <% if (rss && rss.articles && rss.articles.length > 0) { %> <% rss.articles.forEach(function(item, index){ %> <div class="slide <%- index === 0 ? 'active' : '' %>"> <small><%- vis.formatDate(item.pubdate, "DD.MM.YYYY HH:mm") %></small> <h3 style="margin: 8px 0;"><%- item.title %></h3> <div class="rss-desc"><%- item.description %></div> </div> <% }); %> <% } else { %> <p>Lade Feeds...</p> <% } %> </div> <script> (function() { // Das setTimeout sorgt dafür, dass VIS Zeit zum Rendern hat setTimeout(function() { var containerId = 'rss_wrapper_<%- widgetid %>'; var root = document.getElementById(containerId); if (!root) return; var slides = root.getElementsByClassName('slide'); var current = 0; var pause = 5000; // 5 Sekunden pro Artikel if (slides.length > 1) { setInterval(function() { // Alten Slide verstecken slides[current].classList.remove('active'); // Index weiterzählen current = (current + 1) % slides.length; // Neuen Slide zeigen slides[current].classList.add('active'); }, pause); } }, 1500); // 1,5 Sekunden Verzögerung beim Start })(); </script>Leider nein.
Das problematische setInterval ist noch drin<style> #rss_wrapper_<%- widgetid %> { height: 100%; width: 100%; overflow: hidden; } #rss_wrapper_<%- widgetid %> .slide { display: none; padding: 10px; } #rss_wrapper_<%- widgetid %> .active { display: block; animation: fadeInRSS 0.6s ease-in-out; } @keyframes fadeInRSS { from { opacity: 0; } to { opacity: 1; } } </style> <div id="rss_wrapper_<%- widgetid %>"> <% if (rss && rss.articles && rss.articles.length > 0) { %> <% rss.articles.forEach(function(item, index){ %> <div class="slide <%- index === 0 ? 'active' : '' %>"> <small><%- vis.formatDate(item.pubdate, "DD.MM.YYYY HH:mm") %></small> <h3 style="margin: 8px 0;"><%- item.title %></h3> <div class="rss-desc"><%- item.description %></div> </div> <% }); %> <% } else { %> <p>Lade Feeds...</p> <% } %> </div> <script> (function() { var containerId = 'rss_wrapper_<%- widgetid %>'; var timeoutKey = '__rssTimeout_' + containerId; /* * Falls das Template wegen geänderter RSS-Daten erneut gerendert wird, * wird ein eventuell noch laufender Timeout dieses Widgets entfernt. */ if (window[timeoutKey]) { clearTimeout(window[timeoutKey]); window[timeoutKey] = null; } function startSlider() { var root = document.getElementById(containerId); if (!root) return; var slides = root.getElementsByClassName('slide'); var current = 0; var pause = 5000; if (slides.length <= 1) return; function showNextSlide() { /* * Bei jedem Durchlauf erneut prüfen, ob der Container noch existiert. * Falls VIS das Widget neu gerendert oder entfernt hat, endet die Kette. */ root = document.getElementById(containerId); if (!root) { window[timeoutKey] = null; return; } slides = root.getElementsByClassName('slide'); if (slides.length <= 1) { window[timeoutKey] = null; return; } if (current >= slides.length) { current = 0; } slides[current].classList.remove('active'); current = (current + 1) % slides.length; slides[current].classList.add('active'); window[timeoutKey] = setTimeout(showNextSlide, pause); } window[timeoutKey] = setTimeout(showNextSlide, pause); } /* * Verzögerter Start, damit VIS Zeit zum Rendern hat. * Auch dieser Start-Timeout wird beim erneuten Rendern oben abgeräumt. */ window[timeoutKey] = setTimeout(startSlider, 1500); })(); </script> -
Du hast das Skript überarbeitet richtig ?
-
Du hast das Skript überarbeitet richtig ?
@holly200289
chatgpt hat es gemacht -
Sonst müllt der speicher voll richtig
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden