• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

autom. Scrolldown

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
Hey Leute,

mit dem unten geposteten JS veranlasse ich den Browser nach Neuladen der Seite an die Position herunterzuscrollen, an der er sich befand, als die Seite neu aufgerufen wurde. Das funktioniert wunderbar. Allerdings - und das ist schon irgendwie logisch - baut er erst die Seite auf und scrollt dann runter. Das dauert keine 10tel Sekunde und dennoch ist es für das Auge sehr unangenehm, wenn man im unteren Bereich der Seite mehrere Klicks machen möchte und er jedes Mal zappelt - irgendwann bekommt man einen epileptischen Anfall :confused:
Allerdings schafft er es auch manchmal, dass sich die Änderungen auftun, ohne dass er wackelt - vor allem wenn nicht viel NEUES zu laden ist.

Kann man den Browser dazu bringen, erst alles (im Hinterkopf) neuzuladen, die Scrollposition auszulesen und dann das Bild freizugeben? Ich hoffe, ihr wisst, was ich meine. Die Seite hat viele Grafiken.


[src=javascript]function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca;
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}

window.onload = function() {
var yScroll = readCookie("scrollPos");
if(yScroll)
scrollTo(0, yScroll);

window.onscroll = function() {
var yScroll;
if (self.pageYOffset) {
yScroll = self.pageYOffset;
} else if (document.documentElement && document.documentElement.scrollTop){ // Explorer 6 Strict
yScroll = document.documentElement.scrollTop;
} else if (document.body) {// all other Explorers
yScroll = document.body.scrollTop;
}
createCookie("scrollPos", yScroll, 14)
}
}
[/src]
 

werner

Suchtspielmacher (ehm.)

Registriert
20 Juli 2014
Beiträge
743
Ort
Mannheim
Das liegt außerhalb deiner Möglichkeit, fürchte ich.

Wieso müssen deine User die Seite denn ständig neu laden?
Wäre es dann nicht einfacher mittels AJAX Content neu zu holen?
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #3
Ach verdammt, ich konnte es mir schon denken. Das Projekt hatte ich vor Jaaaahren begonnen ist mittlerweile unglaublich komplex. Ein Spiel. Zu groß, um alles im Nachhinein mit Ajax zu realisieren. mittlerweile arbeite ich viel damit. Aber das riesige Grundgerüst ist eben doch noch mit Reaload gemacht. Das stört ansich überhaupt nicht - nur das winzige Zappeln ist ein Schönheitsfehler. Nagut, dann lebe ich damit. Trotzdem danke.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Der Vorschläg wäre vielleicht nicht so schick, aber mit Anchorn/Ankern zu arbeiten fällt außerhalb des Möglichen?

So würde der Browser zumindest an die Position springen an der sich das Element befindet - ich weiß nicht 100% genau wie der Fall liegt, wenn Bildinhalte nachgeladen und keine Größenangaben festgelegt sind , wodurch der Inhalt dynamisch wächst..., aber Grundlegend könnt das eine Alternative bzw. Ergänzung sein. Und dafür sind die eigentlich auch gemacht worden.

Ansonsten kannst du natürlich, wenn du die Seite über ein Menü navigierst, die Seite mittels CSS Transforms und Animations (versuchen) sanft (animiert) hinein zu scrollen nachdem die Seite geladen ist. Aber das hätte wieder ein paar andere Nachteile... aber so als Idee.

Oder du animerst das scrollen, so das es sanft aussieht, mittels Javascript. Anstatt die Scrollposition direkt zu setzen.

Aber man muß auch dazu sagen, die Lösung mit dem Scrollen hat einen Nachteil, wenn sich die Aufllösung ändert, mit einem fixen Scrollwert würdest du bei einer anderen Auflösung wieder an einer anderen Stelle landen; also wenn der sichtbare Fensterteil größer oder kleiner wird, du aber für eine Höhe von X Pixeln angelegt/gespeichert hast. <--- ähm ja, ist natürlich Quatsch... wir reden hier ja von festen Pixeln, also bei fixen Höhen von Containern und breiten, wohl kein Problem :D
 
Zuletzt bearbeitet:

werner

Suchtspielmacher (ehm.)

Registriert
20 Juli 2014
Beiträge
743
Ort
Mannheim
Rein aus Interesse, welchen Browser verwendest du?

Als workaround könntest du auch beim reload der Seite, wenn eine scrollpos gespeichert wurde (der User also nicht neu auf die Seite kommt), einen Minikurzen "Loading" Bildschirm anzeigen, der einfach weiß ist und über allem drüber liegt, mit einer drehenden Animation. Nur für ganz kurz, und im Hintergrund dann quasi zu der Position scrollen, dann sollte es auch nicht flackern.
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #6
Danke für die tollen Ideen.

Also der Browser (FF) springt mit meinem Script zZ perfekt an die Ausgangsposition. Und das ja auch extrem schnell (manchmal dauerts mal ne halbe sekunde). Somit wäre ein Wartebild wahrscheinlich kaum also solches zu erkennen, weil es sofort wieder verschwindet. Das sieht dann auch wie Flackern dreier Frames aus. Oder man setzt es auf 1 Sekunde fest, was das Navigieren aber unnötig verlangsamt.

Ein sanfter Scrolldown erzwingt auch eine gewisse Zeitspanne, damit es "wirkt".

Ich dachte, dass es halt eine Möglichkeit gibt, den Browser zu zwingen, erst ALLES (auch die Scrollposition) fertig zuladen und dann das Gesamtergebnis auf dem Bildschrim preiszugeben.

Ähnlich der Wahl, ob erst alle Bilder geladen werden sollen und dann alle zusammen angezeigt werden sollen, oder ob immer sofort das angezeit werden soll, was bereits geladen ist.

EDIT: Ich sehe gerade, dass immer erst die Bilder geladen werden und dann die Scrollposition verändert wird. Kann man das nicht umdrehen? Problem ist glaube ich, dass es den y-Koordinaten-Wert schlichtweg noch nicht gibt, wenn die Seite keinen Inhalt hat, richtig?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Wenn die Bilder mit Größenangaben vordefiniert und bekannt sind, hilft das dem Browser ja auch das gesamte Layout der Seite zu bestimmen, als wenn diese dynamisch in das Layout platziert werden.

Eventuell hilft es auch schon Div Container(n) oder ähnliches, in denen die Bilder geladen werden, vorzudefinieren - so bleibt das Layout "fix" - aber die noch nicht dargestellten Bilder werden einfach an die Positionen geladen und das Layout "wechselt" bzw. "wächst" nicht mehr, also weniger "flackern".

Vielleicht kannst du das testen? - Weil, alles was dem Rendering des Layouts hilft und das dieses nicht mehr "schwankt" durch Dynamik, sollte dazu beitragen dass die Seite besser ausgewertet werden kann, selbst wenn noch Bilder im Hintergrund geladen werden.

Ansonsten gibt es glaube ich auch eine Möglichkeit, Bilder in einer Art Queue über Javascript laden und platzieren zu lassen. Also du gibst für alle Bereiche die Bilder an Javascript, und es werden dann mit diesen Bildern "img" Tags dynamisch erstellt und automatisch geladen (das würde ich dann aber auch in anderen Browsern cross-testen) - wobei die Priorität der Bilder die zuerst "nachgeladen" werden über Javascript erst diese sind die zu dem angescrollten Bereich gehören. Das könnte klappen.... ich weiß aber nicht in wie weit das Sinn macht und ob es wirklich eine Verbesserung darstellt. ;)
 

philofdeath

Psycho

Registriert
15 Juli 2013
Beiträge
157
Ort
Bielefeld
Nur als Idee.
Du kannst doch einfach den Content mittel css ausblenden und via window load function den Content einblenden.
Bspw.
[src=javascript]$( window ).load(function() {
setTimeout(function(){$('.content').addClass('show');}, 1000);[/src]

Somit wird der gesamte Content erst angezeigt, wenn die Seite komplett geladen wurde.
Mit dem delay verhinderst du das flackern

Zumal du das dann mit animate.css auch richtig fancy einfaden lassen könntest :-)
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
@philofdeath: Sicher? - Wenn die Seite schon dargestellt und das JS ausgeführt wird, während die Bilder noch parallel (nach/mit)laden? :unknown:
 

philofdeath

Psycho

Registriert
15 Juli 2013
Beiträge
157
Ort
Bielefeld
DIe Bilder werden durch das css ja ausgeblendet.
Am besten einfach opacity:0 setzen.

Wenn alle Elemente der Website fertig geladen wurden, gibt das javascript, nach einer Sekunde Verzögerung, dem Content die Klasse Show, welche dann mit opacity:1 "bestückt" ist.

Also eigentlich müsste das funktionieren. Ich probiere das gleich mal zuhause aus.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
@philofdeath: Nen Timeout ist aber generell nicht unbedingt das schlauste, weil hier blockt Javascript (eventuell) andere Ausführungen des Browsers.

Ein benannter SetInterval wäre daher vielleicht sogar besser, selbst wenn dieser nur einmal feuert und danach gecleared wird.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Vielleicht kannst du das ja mal mit simuliertem Download der Bilder testen, also 5-10 MB Bilder einbetten und dann schauen ob Bilder "plötzlich" auftauchen...

Zum Beispiel hiermit und einer geringeren Bandbreite: http://www.dallaway.com/sloppy/

Mir ist gerade noch eine Idee gekommen, man könnte doch alle Images auf ihre Load status hin überprüfen, nicht? - Und dann entsprechend Abfragen ob alle Bilder geladen sind?
Und dann die Seite "freigeben". Aber ist natürlich das Problem, bei einer langsamen Verbindung, sieht man vielleicht lange Zeit "nichts".
 
Zuletzt bearbeitet:

werner

Suchtspielmacher (ehm.)

Registriert
20 Juli 2014
Beiträge
743
Ort
Mannheim
Wenn ich mir vorstelle, ein Browsergame zum spielen, bei dem ich aktualisieren muss, dann würde mich ein Ladescreen doch eher stören, denke ich. Da wäre das kurze Flackern noch das geringste Problem. Gerade als Internetuser ist mir das ja bekannt und ich bemerke sowas dann gar nicht mehr.

Jetzt möchte ich das Browsergame aber auch mal sehen, um mir eine Meinung bilden zu können :D
 

nietaL

NGBler

Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
  • Thread Starter Thread Starter
  • #17
Es ist kein Browsergame, sondern eine GUI für ArmA-III-Events. Von dem "Schreibtisch" aus kann man eben alles vorbereiten (wie damals im Brettspiel RISIKO). Nur wird hier eben nicht gewürfelt sondern aufm Server die Planung in eine ArmA-Mission konvertiert. Das Flackern entsteht, wenn man ein neues Gebiet auf der Karte anklickt. Dabei holt der Client nämlich viele Infos vom Server. Damals (vor 4 Jahren) habe ich eben mti GET gearbeitet und wusste es noch nicht besser. Für den kleinen Schönheitsfehler ist mir der Aufwand aber zu groß, alles Richtung AJAX umzuschreiben. Neue Element schreibe ich allerdings schon so, dass sie per AJAX aktualisiert werden.

Wen's interessiert: http://armaworld.de/index.php?thread/1631-projekt-ouraltis/&postID=20805#post20805
 
Oben