Off-Canvas Menü per wischen öffnen

  • Hallo,


    ich habe eine kleine für Mobilgeräte optimierte Seite gebaut, diese ist aktuell komplett frei von JS (um volle Funktionalität auch bei deaktiviertem JS zu gewährleisten).


    In dieser verwende ich ein Off-Canvas Menü, vollständig realisiert per CSS. Per grafischen Button ergibt sich somit der nette Slide-In Effekt.


    Nun würde ich gern on Top per Javascript realisieren, dass besagtes Menü auch per wischen von links nach rechts geöffnet und von rechts nach links geschlossen wird.


    Die jetzige Funktionalität soll erhalten bleiben, die Wischfunktion eben nur zusätzlich gegeben sein.


    Ist dies grundsätzlich möglich? Wenn ja... wie?


    Leider bin ich in Javascript nicht allzu bewandert (Ich kanns gut lesen, selbst die Syntax schreiben ist aber problematisch)


    Ich bin für jeden Hilfe dankbar :)

  • Danke, werd ich mir mal anschauen. Bleibt aber die grundsätzliche Frage, ob dies überhaupt per Javascript einfach so nachgerüstet werden kann, dass bei deaktiviertem JS die Funktionalität genau so gegeben ist, wie es jetzt der Fall ist. Kann mir das wer sagen?

  • Also ich bekomm es aktuell nicht so richtig hin.


    Ich hab mir Hammer.js angeschaut, hier bin ich bisher noch gar nicht durchgestiegen. Ich hab zwar schon ein paar kleine Erfahrungen mit Javascript, jedoch ist die gesamte Gestensteuerung komplettes Neuland für mich.


    Hier einmal der Code meiner HTML (Links und Inhalt mal ersetzt durch Dummies)


    und der dazugehörige (relevante) css Code:



    Im Fall des Klicks auf den Button wird also das Menü reingeschoben indem die CSS Zuweisung verändert wird.


    Dies kann ich momentan aber nicht wirklich per Javascript darstellen. Im Prinzip brauch ich nur eine Funktion, mit der ich beim wischen nach rechts den link-verweis auf #openNav und beim wischen nach rechts den Verweis auf #closeNav setzen kann.


    Wie bekomm ich das ggf. mit Hammer.js jetzt hin?


    Ich bin dann noch über slideout.js gestolpert...das funktioniert sogar mit der Gestensteuerung, allerdings funktioniert der menübutton dann nicht mehr korrekt...Woran kann das liegen?

  • Keine Ahnung, müsste ich mir alles selber anschauen. Habe mich hier lediglich eingeschaltet, da ich schon mal was von Hammer.js gehört habe. Selber genutzt habe ich es aber noch nie...


    Wenn sich bis Samstag hier keine meldet, der damit schon Erfahrung hat, werde ich mir das mal anschauen.

  • Wärst du so nett und würdest noch den kompletten Code inkl. der Bilder usw. zur Verfügung stellen?


    Dann wäre das etwas einfacher für mich.


    Edit:


    So, hier ist schon mal ein Beispiel für eine Navigation mit Hammer.js: https://codepen.io/jr-cologne/pen/dzrGev


    Das Öffnen per Klick auf den Button habe ich bisher noch nicht implementiert. Aber vielleicht bekommst du jetzt den Rest ja auch selber hin?

  • ich mach dir da mal nen kompletten rudimentären Code fertig. Den gesamten Code bzw die eigentlichen Bilder kann ich dir aus Datenschutzgründen nicht geben, das sollte aber denk ich kein Problem sein.


    die Navigation im Beispiel....das ist ja eigentlich ne reine responsive Geschichte, mir ist ja eher wichtig, dass zusätzlich das wischen möglich ist. Allerdings muss ich mir das auch erst nochmal genauer anschauen, habs bisher nur kurz überflogen mangels Zeit im Moment...

  • Deswegen ja auch dieser Satz...

    Das Öffnen per Klick auf den Button habe ich bisher noch nicht implementiert. Aber vielleicht bekommst du jetzt den Rest ja auch selber hin


    Bekommst du das selber implementiert oder soll ich dir da auch noch unter die Arme greifen?


    Im Idealfall schaffst du es sozusagen, mein Beispiel zu nehmen und dies dann auf deine eigene Website anzuwenden bzw. dort einzubauen.

  • das Problem bei dem Beispiel ist, das hier auch kein wischen funktioniert. Ich hab mir den Code eben nochmal angeschaut, theoretisch sollte das Wischen ja funktionieren, dies tut es aber nicht. Oder ist die Seite gar nicht zum Testen geeignet und ich muss mir den Beispielcode nochmal selbst kopieren? Sry, ich bin grad etwas müde ^^


    Morgen hab ich etwas Ruhe dazu, da schau ich mir das dann nochmal konkret an. Dann kann ich dir auch sagen, ob ich das schon für mein Projekt umsetzen kann.

  • Äh... Du klickst auf meinen Link und bekommst dort dann den Code sowie ein Vorschau-Fenster zu sehen. Wenn du dieses verkleinerst, sodass die Nav nicht mehr zu sehen ist und der typische Hamburger-Button erscheint, kannst du die Nav per Wischen öffnen...


    Habe es auf dem PC sowie Smartphone getestet und es funktioniert einwandfrei.

  • Stimmt, jetzt funktioniert es bei mir ebenso. Ob ich das allerdings in meine bestehende Seite integrieren kann bin ich aktuell eher unsicher. Der responsiveteil aus deinem Beispiel ist für mich gar nicht nötig, da auch bei höherer Auflösung das off Canvas Menü nutze. Das ganze wird später zu 80% auf Handys und noch 20% auf Tablets genutzt, es wird keine Homepage in dem Sinn. Dies nur mal als Zusatzinfo.


    Ich werde jetzt einmal versuchen, das Beispiel welches du gepostet hast für mich zu adaptieren, wichtig ist dabei, dass der Klick auf den Button per CSS realisiert werden muss (per Javascript wäre es ja mit onclick wohl recht einfach), da diese Funktion ja auch bei deaktiviertem Javascript voll funktionieren soll.


    Zeitgleich habe ich aber gestern schnell noch den bei mir existierenden Code vereinfacht, so dass nur noch das Menü übrig ist. Nachfolgend der Code:


    HTML:


    CSS:


    als Bild hab ich ein einfaches png mit Menübutton hinterlegt, dieses häng ich hier einfach mal mit an. Aus dem Quellcode oben und deinem Beispiel brauch ich quasi jetzt einen Hybriden. Ist halt wie gesagt noch Neuland für ich, ich hab grad ein wenig Zeit im Büro, demzufolge versuch ich es jetzt erstmal selbst. Sollte ich es nicht hinbekommen, meld ich mich nochmal.

  • Ich bin dann doch ein wenig am verzweifeln. Die Gestensteuerung kann ich reproduzieren, ich hab zumindest jetzt einmal die CSS Steuerung so angepasst, dass das Menü losgelöst bewegt werden kann (also der Inhalt wie in deinem Beispiel dahinter verschwindet), aber inzwischen hab ich mich beim Denken ein wenig verlaufen. Die Hybridlösung hab ich bis dato noch nicht...da fehlt mir noch der entscheidende Einfall...


    Das Problem ist halt, dass bei der JS Variante ja die Klasse des Menüs geändert wird, während ich bei der CSS Variante einfach nur eine Div-ID manipuliere...ich denk ich bin dicht dran, aber mir fällt das denken grad echt schwer ^^


    OK, ich vermelde einen Durchbruch. Nachdem ich mir meine letzte Aussage und den JS Code nochmal genau angeschaut hab kam die erleuchtung. Ich immitiere im JS einfach mein CSS Verhalten, schon funktioniert es. Ich denke ich kann es jetzt problemlos adaptieren, erste Tests haben jetzt gut funktioniert. Vielen Dank für das gute Beispiel oben :)

  • Jup...ein Problem hab ich jetzt...das normale vertikale Scrollen ist durch das Hammer Script leider wohl deaktiviert worden. Ergibt ja irgendwie auch Sinn, da es ja im Prinzip Gesten der gleichen Klasse sind. Kann ich das irgendwie umgehen? Meinetwegen auch über ne Funktion, die das eigentlich standardmäßige scrollen im Hammer zusätzlich immitiert?

  • Beim Script hab ich den responsive-part entfernt und eben das eigentliche Verhalten beim swipen geändert.


    Hier mal der rudimentäre aber voll funktionierende Code:


    HTML + JS:

    und CSS:

    die Divs im Contentteil sind im Beispiel extra hoch angelegt, scrollen wäre somit zwingend nötig, funktioniert aber auf Handys nicht. Getestet auf mehreren Mobilgeräten und dort in mehreren Browsern.

  • So, Problem auch gelöst. Folgende Änderung/Ergänzung im JS war nötig:


    Code
    var mc = new Hammer.Manager(body, {
                    touchAction : 'auto'
            });

    Jetzt funktioniert alles wie es soll. Vielen Dank nochmal :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!