Ergebnis 1 bis 9 von 9

Thema: jQuery Accordion / ScrollTo

  1. #1
    Contao-Nutzer
    Registriert seit
    31.03.2010.
    Beiträge
    15

    Standard jQuery Accordion / ScrollTo

    Hallo zusammen :-)

    Nach stundenlanger googelei bin ich jetzt soweit, dass ich doch das Forum bemühen muss...
    Auf meiner Seite www.zehelein-schemm.de arbeite ich viel mit dem jQuery Accordion. Das Problem: Die Inhalte des Accordions sind zumeist größer als das Fenster. Wenn man nun nach unten scrollt und das nächste Accordion anklickt, schiebt es sich nach oben (weil das andere geschlossen wird).
    Ich möchte nun das Template entsprechend anpassen, sodass die Seite zum aktiven Toggler nach oben springt.

    Soweit so gut. Ich weiß es gibt im Internet viele Artikel dazu, ich habe unter anderem diese Erweiterung für jQuery gefunden: http://balupton.github.io/jquery-scrollto/. Es scheint wohl eine der praktikabelsten Lösungen für das Problem (zumindest bei jQuery) zu sein (vielleicht geht es aber noch einfacher?). Die Erweiterung ist bereits eingebunden. Leider habe ich aber keine Ahnung von javascript und weiß daher auch nicht welcher Code an welcher Stelle einzubinden ist.

    Das j_accordion Template ist soweit noch jungfräulich:

    Code:
    <script src="<?php echo TL_ASSETS_URL; ?>assets/jquery/ui/<?php echo JQUERY_UI; ?>/jquery-ui.min.js"></script>
    <script>
      (function($) {
        $(document).ready(function() {
          $(document).accordion({
            // Put custom options here
            heightStyle: 'content',
            header: 'div.toggler',
            collapsible: true
          });
          var activate = function(tog) {
            var tgs = $('div.toggler');
            tgs.removeClass('active');
            tog.addClass('active');
            tgs.next('div.accordion').attr('aria-hidden', 'true');
            tog.next('div.accordion').attr('aria-hidden', 'false');
          };
          $('div.toggler').focus(function(e) {
            $('div.toggler').attr('tabindex', 0);
            $(this).attr('tabindex', -1);
          }).blur(function() {
            $(this).attr('tabindex', 0);
          }).click(function() {
            activate($(this));
          }).keypress(function(event) {
            if (event.keyCode == 13) activate($(this));
          });
        });
      })(jQuery);
    </script>
    Ich danke euch jetzt schon für eure Hilfe. Wer ein bisschen Javascript Erfahrung hat hält meine Frage sicher für bescheuert, aber ich denke ich bin nicht der Erste und Einzige mit dem Problem..

    vlg
    ***
    Geändert von tyler (11.10.2013 um 17:24 Uhr)

  2. #2
    Contao-Fan
    Registriert seit
    02.03.2013.
    Beiträge
    436

    Standard

    Code:
    .click(function() {
            activate($(this));
            $(this).ScrollTo();
          })
    müsste evtl so gehen und achte darauf, dass dein Scroll.Script richtig eingebunden ist (momentan kommt noch ein 404)

  3. #3
    Contao-Nutzer
    Registriert seit
    31.03.2010.
    Beiträge
    15

    Standard

    Hallo Wulf,

    danke für deine schnelle Antwort!

    Das Script ist richtig eingebunden, das habe ich nochmal geprüft... ( http://zehelein-schemm.de/jquery-scr...ry-scrollto.js )

    EDIT:
    Wenn ich den Code an der beschriebenen Stelle einbinde, scrollt der Bildschirm dorthin bevor sich das vorherige Accordion geschlossen hat. Das heißt, ich lande nicht beim Kopf sondern oftmals mitten drin. Deshalb ist die Beschreibung des scrollTo Skriptes für mich auch nicht zielführend...

    Ein Beispiel wie das aussieht:

    http://www.zehelein-schemm.de/sortim...erdbeeren.html

    Derzeitiger Code:

    Code:
    ...
    }).click(function() {
            activate($(this));
            $(this).ScrollTo({
            duration: 1000
            });
    ...
    Der scrollTo soll also erst erfolgen, wenn das vorherige Element schon collapsed ist.

    vlg
    Geändert von tyler (14.10.2013 um 15:55 Uhr)

  4. #4
    Contao-Fan
    Registriert seit
    02.03.2013.
    Beiträge
    436

    Standard

    du könntest diese Variante ohne scrollTo script ja mal testen
    Code:
    )
           .
           .
        }).keypress(function(event) {
            if (event.keyCode == 13) activate($(this));
          }).on( "accordionactivate", function( event, ui ) {
             if ($(ui.newHeader).offset() != null) {
             ui.newHeader, $("html, body").animate({scrollTop: ($(ui.newHeader).offset().top)}, 1500);}   
          });
    
      })(jQuery);
    1500 ist die Scrollgeschwindigkeit in ms

  5. #5
    Contao-Nutzer
    Registriert seit
    31.03.2010.
    Beiträge
    15

    Standard

    Geht leider nicht. Hier scrollt gar nichts
    Geändert von tyler (15.10.2013 um 12:07 Uhr)

  6. #6
    Contao-Fan
    Registriert seit
    02.03.2013.
    Beiträge
    436

    Standard

    Hab es nur hier getestet http://codepen.io/anon/pen/qkDnL, aber vielleicht verhält sich die Testumgebung einfach anders.

  7. #7
    Contao-Nutzer
    Registriert seit
    23.10.2012.
    Beiträge
    16

    Standard accordion scroll to

    Ich habe das so gelöst:

    Im Template j_accordion.html5 unter der Zeile active: false, folgenden Code eingefügt:

    activate: function (event, ui) {
    var scrollTop = $(".accordion").scrollTop();
    if(!ui.newHeader.length) return;
    var top = $(ui.newHeader).offset().top;
    $("html,body").animate({
    scrollTop: scrollTop + top - 35
    }, "fast");
    }

    Siehe hier: http://www.goetzinger-hoehe.de/pensi...n-sachsen.html
    Geändert von FroschZ1000 (24.03.2014 um 13:03 Uhr)

  8. #8
    Contao-Nutzer
    Registriert seit
    31.03.2010.
    Beiträge
    15

    Standard

    So sieht das Template jetzt aus. Vielleicht hilft es ja jemandem :-)
    Vielen Dank für eure Beiträge!


    Code:
    <script src="<?php echo TL_ASSETS_URL; ?>assets/jquery/ui/<?php echo JQUERY_UI; ?>/jquery-ui.min.js"></script>
    <script>
      (function($) {
        $(document).ready(function() {
          $(document).accordion({
            // Put custom options here
            heightStyle: 'content',
            header: 'div.toggler',
            collapsible: true
          });
          var activate = function(tog) {
            var tgs = $('div.toggler');
            tgs.removeClass('active');
            tog.addClass('active');
            tgs.next('div.accordion').attr('aria-hidden', 'true');
            tog.next('div.accordion').attr('aria-hidden', 'false');
            //alert("in");
            var togt = tog;
            window.setTimeout(function(){
            //alert(that);
            //window.scrollTo(0, $(togt).offset().top);
            $('html').animate({scrollTop : $(togt).offset().top},500);
            }, 500);
            
          };
          $('div.toggler').focus(function(e) {
            $('div.toggler').attr('tabindex', 0);
            $(this).attr('tabindex', -1);
          }).blur(function() {
            $(this).attr('tabindex', 0);
          }).click(function() {
            activate($(this));
          }).keypress(function(event) {
            if (event.keyCode == 13) activate($(this));
          }).on( "accordionactivate", function(event,ui){
             if ($(ui.newHeader).offset() != null) {
             ui.newHeader, $("html, body").animate({scrollTop:($(ui.newHeader).offset().top)}, 1500);}   
          });
        });
      })(jQuery);
    </script>

  9. #9
    Contao-Nutzer Avatar von ok99
    Registriert seit
    14.02.2012.
    Beiträge
    163

    Standard Funktioniert nicht im Chrome???

    Vielen Dank für das Script!

    Aber kann es sein, dass das bspw. im Chrome (Version 34) nicht funktioniert??
    Im Firefox läuft das richtig gut!!!

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
  •