Ergebnis 1 bis 16 von 16

Thema: Sticky Header soll erkennen, wenn via Mobile zugegriffen wird

  1. #1
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard Sticky Header soll erkennen, wenn via Mobile zugegriffen wird

    Hallo, ich hab ein Javascript für mein Menü, welches sich nach einer gewissen scrollhöhe oben am Bildschirm anpasst.

    Funktioniert soweit sehr gut.

    Jetzt möchte ich aber zusätzlich noch einen weiteren ScrollPunkt (scrollTo) für mobile geräte hinzufügen. Kann mir jemand sagen, wie ich das erstelle?

    Es soll erkannt werden wenn ein User via Mobile auf die HP zugreift. Hier sollte dann scrollTo bei 420 sein. Über den PC ist der scrollTo bei 470 (Siehe Code).

    Code:
    <script>
    $(window).scroll(function(){
        if ($(window).scrollTop() >= 270) {
           $('.custom').addClass('fixed-header');
           $('.custom .logo_menu').fadeIn(800);
           $('.custom .logo_menu').css('display', 'block');
           $('.custom').css('background-color', '#f9f9f9');
        }
        else {
           $('.custom').removeClass('fixed-header');
           $('.custom .logo_menu').css('display', 'none');
           $('.custom').css('background-color', '#ffffff');
        }
    });
    </script>
    LG, Andi

  2. #2
    Contao-Fan
    Registriert seit
    29.07.2010.
    Beiträge
    516

    Standard

    Hallo,

    schau dir mal bugbuster/contao-mobiledetection-bundle an, dann kannst du zusätzlich die class abfragen mit welchem Gerät zugegriffen wird und das script entsprechend anpassen.

  3. #3
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard

    Ok, das ist schon mal gut, aber mir geht es um die Zeile
    Code:
    if ($(window).scrollTop() >= 270)
    Hier soll entweder die Zahl 270 oder 240 hinein.

    Ich weiß jetzt nicht, wie ich es hier anstelle, dass ich sage:

    wenn mobile, dann 240, ansonsten 270.
    LG, Andi

  4. #4
    Community-Moderatorin & Contao-Urgestein Avatar von mlweb
    Registriert seit
    10.07.2011.
    Beiträge
    6.745
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wenn ich @NetMediaWork richtig verstanden habe, dann setzt die oben genannte Erweiterung eine Klasse bei mobilem Endgerät, die Du in Deinem js verwenden kannst.
    Ich habe Dir mit meinen Hinweisen geholfen und Du möchtest Dich bedanken?
    Unterstütze bitte das Contao-Projekt (Button Links)
    Weitere Spendenmöglichkeiten
    ------------------------------------------------------------------------------------------------------
    Contao-Dokumentation: Contao-Handbuch und Contao-Entwickler-Doku
    Contao-Online-Video-Kurse: Contao Academy
    Funktionalität erweitern: Contao-Erweiterungen

    Für Dinge die man mit html5 und css3 lösen kann, braucht man kein javascript.




  5. #5
    Contao-Fan
    Registriert seit
    29.07.2010.
    Beiträge
    516

    Standard

    Zitat Zitat von mlweb Beitrag anzeigen
    Wenn ich @NetMediaWork richtig verstanden habe, dann setzt die oben genannte Erweiterung eine Klasse bei mobilem Endgerät, die Du in Deinem js verwenden kannst.
    Richtig z.b.

    Code:
    <body id="top" class="mac safari webkit sf11 computer" itemscope itemtype="http://schema.org/WebPage">

  6. #6
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard

    Hab nun etwas herumprobiert, aber ich komm auf keinen grünen Zweig:

    Code:
    <script>
    $(window).scroll(function(){
    	if ($(.mobile)) {
    		wert = 211;
    	} else {
    		wert = 270;
    	}
    	if ($(window).scrollTop() >= wert) {
    	   $('.custom').addClass('fixed-header');
    	   $('.custom .logo_menu').fadeIn(800);
    	   $('.custom .logo_menu').css('display', 'block');
    	   $('.custom').css('background-color', '#f9f9f9');
    	}
    	else {
    	   $('.custom').removeClass('fixed-header');
    	   $('.custom .logo_menu').css('display', 'none');
    	   $('.custom').css('background-color', '#ffffff');
    	}
    });
    </script>
    Das funktioniert mal nicht
    LG, Andi

  7. #7
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard

    Ich hab's gelöst.

    So fuktioniert es jetzt:
    Code:
    <script>
    $(window).scroll(function(){
    	if ($('.mobile').length > 0) {
    		wert = 200;
    	} else {
    		wert = 270;
    	}
    	    if ($(window).scrollTop() >= wert) {
    	       $('.custom').addClass('fixed-header');
    	       $('.custom .logo_menu').fadeIn(800);
    	       $('.custom .logo_menu').css('display', 'block');
    	       $('.custom').css('background-color', '#f9f9f9');
    	    }
    	    else {
    	       $('.custom').removeClass('fixed-header');
    	       $('.custom .logo_menu').css('display', 'none');
    	       $('.custom').css('background-color', '#ffffff');
    	    }
    });
    </script>
    LG, Andi

  8. #8
    Contao-Nutzer
    Registriert seit
    09.09.2011.
    Beiträge
    214

    Standard Mal 'ne Frage zum Verständnis:

    Zitat Zitat von m-werk Beitrag anzeigen
    ...
    Code:
    //...
    	       $('.custom').addClass('fixed-header');
    	       $('.custom .logo_menu').fadeIn(800);
    	       $('.custom .logo_menu').css('display', 'block');
    	       $('.custom').css('background-color', '#f9f9f9');
    Warum machst du die CSS-Sachen nicht im CSS selbst, wenn du eh schon eine eigene Klasse hinzufügst (.custom.fixed-header)?

    Übergänge (fadeIn) kannst du auch mit CSS-Transitions erstellen.

  9. #9
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard

    Weil wie ich mich nach Sticky Header umgesehen habe, mir nur Javascripts vorgeschlagen wurden und ich dies dann so nachgebaut habe.

    Das heißt, ich müsste noch die .logo_menu und .custom als css anlegen, und dann auch so einbinden?:

    Code:
     $('.custom').addClass('logo_menu');
     $('.custom').addClass('custom');
    NACHTRAG:
    Außerdem hab ich ja .logo-menu auch schon definiert:
    Code:
    .logo_menu {
        width:60px;
        position:absolute;
        float:left;
        display:none;
        margin-top:5px;
        margin-left:20px;
    }
    Ich ändere ja nur im JS display auf block und lass es langsam einblenden.

    Ich hab nun auch ein CSS gebaut, aber die transition funktioniert hier nicht. Das display greift, aber das logo wird nicht langsam eingeblendet. (Den CSS-Teil im JS hab ich natürlich dementsprechend ausgeblendet)
    Code:
    .fixed-header .logo_menu {
        display:block;
        -webkit-transition: all 2s ease-in;
        -moz-transition: all 2s ease-in;
        -o-transition: all 2s ease-in;
        transition: all 2s ease-in;
    }
    Geändert von m-werk (30.07.2018 um 11:32 Uhr)
    LG, Andi

  10. #10
    Contao-Nutzer
    Registriert seit
    09.09.2011.
    Beiträge
    214

    Standard

    Naja, eher so:

    CSS:
    Code:
    /* so soll es am Anfang aussehen: */
    .custom {
    	background-color:#fff;
    }
    .custom .logo_menu {
    	display:none;
    }
    /* und so, wenn die Seite gescrollt wurde: */
    .custom.fixed-header {
    	background-color:#f9f9f9;
    }
    .custom.fixed-header .logo_menu {
    	display:block;
    }
    und

    JS:
    Code:
    $(window).scroll(function(){
    	if ($('.mobile').length > 0) {
    		wert = 200;
    	} else {
    		wert = 270;
    	}
    	    if ($(window).scrollTop() >= wert) {
    	       $('.custom').addClass('fixed-header');
    	    }
    	    else {
    	       $('.custom').removeClass('fixed-header');
    	    }
    });

    Wenn es dann noch faden soll, bspw. sowas:

    CSS:
    Code:
    .custom {
    	background-color:#fff;
    	-webkit-transition: background-color 800ms ease-out;
    	-moz-transition: background-color 800ms ease-out;
    	-o-transition: background-color 800ms ease-out;
    	transition: background-color 800ms ease-out;
    }
    Und wenn du statt nur CSS auch noch LESS verwendest (was einem Contao wirklich leicht macht, weil du die Kompilierung nicht selbst machen musst), musst du auch nicht jedesmal die browserspezifischen Anweisungen einzeln hinschreiben, sondern kannst das als Funktion schreiben:

    LESS:
    Code:
    /* --- einmal die LESS-Funktion definieren: --- */
    .fade(...) {
    	-webkit-transition: @arguments;
    	-moz-transition: @arguments;
    	-o-transition: @arguments;
    	-ms-transition: @arguments;
    	transition: @arguments;
    }
    /* --- und dann immer wieder verwenden: --- */
    .custom {
    	background-color:#fff;
    	.fade(background-color 800ms ease-out);
    }
    .custom.fixed-header {
    	.fade(background-color 2s ease-out);
    }
    Wie du die Funktion nennst und welche Werte du veränderst, ist natürlich dein Ding – sind nur Beispiele von mir.
    Geändert von wanst (30.07.2018 um 11:36 Uhr) Grund: Syntax-Fehler korrigiert

  11. #11
    Contao-Nutzer
    Registriert seit
    09.09.2011.
    Beiträge
    214

    Standard Zum Nachtrag:

    ... dein Nachtrag kam jetzt in mein Geschreibsel rein.

    Ja, eben – den hast du schon definiert, jetzt musst du nur noch sagen, was passieren soll, wenn .custom die .fixed-header dazubekommt. (s.o.)

  12. #12
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard

    CSS:
    Code:
    .custom {
    	background-color:#fff;
    	-webkit-transition: background-color 800ms ease-out;
    	-moz-transition: background-color 800ms ease-out;
    	-o-transition: background-color 800ms ease-out;
    	transition: background-color 800ms ease-out;
    }
    Ich möchte ja eigentlich nur, dass das Header-Logo hier langsam eingeblendet wird, nicht die Farbe. (Siehe meinen letzten Code, wo ich display auf block setze)
    LG, Andi

  13. #13
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard

    Zitat Zitat von wanst Beitrag anzeigen
    ... dein Nachtrag kam jetzt in mein Geschreibsel rein.

    Ja, eben – den hast du schon definiert, jetzt musst du nur noch sagen, was passieren soll, wenn .custom die .fixed-header dazubekommt. (s.o.)
    Das passiert eh. Nur nicht langsam. Das transition greft nicht.

    NACHTRAG:
    Jetzt hab ich mal deinen Vorschlag bei mir eingebunden und angepasst.
    Bis auf das, dass das Logo nicht langsam eingeblendet wird, funktioniert es. Hat bei mir vorher auch funktioniert.

    Ich möchte aber, dass das Logo auch langsam eingeblendet wird.
    Geändert von m-werk (30.07.2018 um 11:47 Uhr)
    LG, Andi

  14. #14
    Contao-Nutzer
    Registriert seit
    09.09.2011.
    Beiträge
    214

    Standard Noch'n Nachtrag – :-/

    Zitat Zitat von m-werk Beitrag anzeigen
    Das passiert eh. Nur nicht langsam. Das transition greift nicht
    Ja, display lässt sich nicht über transition beeinflussen, weil sich das Element dann grundlegend anders verhält – in deinem Fall wird es im DOM am Anfang gar nicht angezeigt. Transitions greifen nur bei Eigenschaften wie Farben, Größen, margin, padding etc., wo es Zwischenwerte gibt. Bei display gibt es nur 0 und 1. Das ließe sich zwar tricksen, indem du statt display bspw. opacity zum Ausblenden hernimmst, aber das ist schlechter Stil, u.a. weil das Element dann in Screenreadern trotzdem vorgelesen wird.

    Du kannst dich ja mal durchwühlen, was Google zu 'css-transition display' hergibt oder das tatsächlich per JS machen.

  15. #15
    Alter Contao-Hase
    Registriert seit
    20.06.2009.
    Ort
    Graz (Austria)
    Beiträge
    1.455

    Standard

    Hm, also, wenn ich das Logo langsam eingeblendet haben möchte, muss ich im JS also diesen bereich doch stehen lassen:

    $('.custom .logo_menu').fadeIn(800);
    LG, Andi

  16. #16
    Contao-Nutzer
    Registriert seit
    09.09.2011.
    Beiträge
    214

    Standard

    Hi back

    Sorry, hatte viel zu tun – bist du inzwischen selbst weiter gekommen? Hast du schon mal bei CSS-Tricks gesucht? Da gibt's coole Ansätze für Probleme, von denen du nie geahnt hättest, dass sie sich mit 'CSS only' lösen lassen.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •