mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 19.04.2024 05:54 Benutzername: Passwort: Auto-Login

Thema: Problem mit Scroll sticking - jquery vom 24.11.2012


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Problem mit Scroll sticking - jquery
Autor Nachricht
hövelmanns
Threadersteller

Dabei seit: 24.11.2012
Ort: -
Alter: 31
Geschlecht: Männlich
Verfasst Sa 24.11.2012 00:18
Titel

Problem mit Scroll sticking - jquery

Antworten mit Zitat Zum Seitenanfang

Also folgendes Vorhaben...

Ich habe eine undefinierte Anzahl von Artikeln in einem container.
Wenn ich scrolle und das Ende eines Artikels erreiche soll der grade gescrollte Artikel
am unteren Bildschirmrand(bottom) kleben bleiben.
Der nächste Artikel soll sich dann von unten über den grade gescrollten schieben,
sodass eine Art Blättereffekt entsteht.
Mein bisheriger Code.

Code:
________________________________________________________________________________________
$(".item-page").addClass("stick");
$("#content").css("height", $("#content").height());
$(window).scroll(function(){
zindex = 214748364;
stick = $(".item-page");
stick.each(function(){$(this).css("z-index", zindex);zindex += 1;});
stick.addClass("stick");
$(".stick").each(function(){
obj=$(this);
var bottom = -(obj.height()-$(window).height());
if(obj.offset().top+obj.height()-$(window).height() <= $(window).scrollTop()){
$(this).css({"position": "fixed","top": bottom});
}else{
obj.css({"position": "relative","top": 0});
};
});
});

________________________________________________________________________________________


Funktionsweise an sich ist ok nur führt er bei jedem pixel der gesrollt wird (logischerweiße) die funktion aus.
Was mich wundert ist allerdings dass er jedes mal meinen style löscht und wieder hinzufügt was zu einem unerträglichen flackern führt.

http://jsfiddle.net/Tv9TU/5/
auf fiddle ist das flackern dafür gibt er alles objekten sofort die fixed position.

bin grade etwas ratlos

mfg hövelmanns


Zuletzt bearbeitet von hövelmanns am Sa 24.11.2012 00:20, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
fyll

Dabei seit: 20.09.2003
Ort: Augsburg
Alter: 39
Geschlecht: Männlich
Verfasst Sa 24.11.2012 10:48
Titel

Antworten mit Zitat Zum Seitenanfang

Warum wundert dich das?
Wenn du dir kurz den Code anschaust:
Beim Scrollen führst du dauerhaft die ganze Zeit einen querySelector() aus und speicherst das Ergebnis in einer Variable.
Das macht man genau andersrum und nur genau einmal.

Dann änderst du beim Scrollen auch noch dauernd die CSS-Klasse und den z-index - auch das solltest nur einmal machen.
Dann kommt was ganz kurioses: Nachdem du all den Objekten, die du zig mal die Sekunde ausließt, eine Klasse gegeben hast, führst du einen weiteren querySelector aus, um genau diese Elemente zu iterieren... * Keine Ahnung... *
  View user's profile Private Nachricht senden
Anzeige
Anzeige
hövelmanns
Threadersteller

Dabei seit: 24.11.2012
Ort: -
Alter: 31
Geschlecht: Männlich
Verfasst Sa 24.11.2012 13:57
Titel

Antworten mit Zitat Zum Seitenanfang

mich wunderst weil ich noch kein crack in jquery bin *zwinker*

aber wie soll ich sonst bei jedem pixel den er scrollt checken
ob die Bedingung wahr ist?

scollen> dann checken> dann für aktuelles ändern

Noch ein Problem was ich festgestellt hab ist dass die divs nachrutschen,
weil sie nicht absolut sind und dadurch natürlich alle nacheinander die Bedingung erfüllen.


vll kannst du mir mit ein bischen Code auf die Sprünge helfen.
  View user's profile Private Nachricht senden
fyll

Dabei seit: 20.09.2003
Ort: Augsburg
Alter: 39
Geschlecht: Männlich
Verfasst Mo 26.11.2012 10:49
Titel

Antworten mit Zitat Zum Seitenanfang

hövelmanns hat geschrieben:
...
aber wie soll ich sonst bei jedem pixel den er scrollt checken
ob die Bedingung wahr ist?....
Klar, das musst du auch prüfen - aber eben nicht mehr als das tun.
.. Aber da oben steht doch shcon fast ne Schritt für Schritt Bastelanleitung Meine Güte!
  View user's profile Private Nachricht senden
hövelmanns
Threadersteller

Dabei seit: 24.11.2012
Ort: -
Alter: 31
Geschlecht: Männlich
Verfasst Di 27.11.2012 20:29
Titel

Antworten mit Zitat Zum Seitenanfang

So gehts auf jeden fall auch nach browserresize mit allem drum und dran kann mann bestimmt nochn bischen schmälern aber reicht volkommen so.
Jetzt bräuchte ich nur noch ein scriptchen was mir elemente an das scrollende sticked wenn das offset des zu stickenden elements erreicht wird... Lächel

aber dat bekomm ich schon noch hin



Code:
      function articleheight() {
         wrapper=$('#content');
         article=$('.item-page');
         position=0;
         zindex=214748364;
                        // spacer ist ein div am Ende jedes Artikels um ihm ein imitiertes bottom padding zu geben
                        // kann man eleganter lösen aber das gibt joomla im standart code nicht her
         $('.spacer').css('height',$(window).height()-495*1.5);
                        //
         article.each(function(){
            $(this).css('z-index',zindex);zindex += 1;
            $(this).css({'min-height':$(window).height()});
            $(this).css({'position':'absolute','top': position+=$(this).prev().height()});
            $(this).attr('anchor',$(this).offset().top+$(this).height()-$(window).height());
            $(this).attr('offset',$(this).css('top'));
         });
         wrapper.css('height', parseInt(article.last().css('top').replace('px',''))+ parseInt(article.last().css('height').replace('px','')));
};
$(window).resize(function(){articleheight();});



Code:


      function stick() {
         object=$('.item-page');
         object.addClass('stick');
         stick=$('.stick');
         $(window).scroll(function(){
            stick.each(function(){
               obj=$(this);
               bottom=-(obj.height()-$(window).height());
               if(obj.attr('anchor')<=$(window).scrollTop()){
                  obj.css({'position':'fixed','top':bottom});
               }else{
                  obj.css({'position':'absolute','top':obj.attr('offset')});
               }
            });
         });
      };


Zuletzt bearbeitet von hövelmanns am Di 27.11.2012 20:36, insgesamt 4-mal bearbeitet
  View user's profile Private Nachricht senden
 
Ähnliche Themen JQuery Scroll.to funktioniert nicht in Firefox
mousewheel scroll problem!
flash - scroll - problem
Problem bei der Verwendung FX.Scroll von Mootool
kleines java - tiny - scroll problem
jquery FF und IE8 Problem
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.