2015-05-08 3 views
7

Ich habe 2 volle Höhe divs. Wenn Sie die Seite nach unten scrollen, scrollt die eine Div nach oben und die andere scrollt in eine entgegengesetzte Richtung. Das funktioniert großartig.Alternate direction Scrollen mit Inhalt unter

Ich versuche, diesen Effekt zu halten, aber normalen Inhalt voller Breite darunter zu legen, während ich versuche, natürliches Scrollen zu erhalten. Also würde ich gerne den alternativen Scrolling-Effekt beibehalten, aber wenn ich am Ende des letzten Divs, das diesen Effekt verwendet, komme, würde ich gerne weiter scrollen, um normalen Inhalt darunter zu sehen.

Hier ist meine jsFiddle, zur Zeit seiner über die Wirkung Floating I beziehen sich auf: http://jsfiddle.net/u9apC/116/ und die JS eingefügt wird unten als Referenz:

(function ($) { 
var top = 0; 

$(document).ready(function() { 
    var contentHeight = $('.right').height(), 
     contents = $('.right > .content').length; 

    top = (0 - (contentHeight * (contents - 1))); 

    $('.right').css('top', top + 'px'); 
}); 

$(window).resize(function() { 
    var contentHeight = $('.right').height(), 
     contents = $('.right > .content').length; 

    top = (0 - (contentHeight * (contents - 1))); 

    $('.right').css('top', (top + $(window).scrollTop()) + 'px'); 
}); 

$(window).scroll(function() { 
    $('.right').css('top', (top + $(window).scrollTop()) + 'px'); 
}); 

})(jQuery); 

EDIT

Hier ist ein Beispiel dafür, was ich will:

enter image description here

+0

"Ich versuche, diesen Effekt zu halten, aber normale Inhalte mit voller Breite darunter zu legen" - können Sie genauer spezifizieren, was meinst du oder besser gesagt, ein Testdiv mit Nummer? –

+0

@AndriyF. Wenn Sie in der JS Fiddle nach unten scrollen, gibt es einen cyanfarbenen Block. Ich möchte nur, dass sie wie normale gestapelte Inhalte unter den nummerierten Boxen sitzt. Nur wenn Sie das Ende der Mehrrichtungs-Divs erreicht haben, sollte es zum Viewport scrollen. Ich habe der Frage ein Bild hinzugefügt, um zu zeigen, was ich benötige. – egr103

Antwort

2

Ich hoffe, dass Sie danach suchen - es ist ein wenig schwer aus der Beschreibung zu visualisieren.

Es gibt ein paar Tricks, diese Funktion zu erhalten:

  1. die Scrollrichtung umkehren, wenn die rechte Spalte oben positiv wird
  2. Sicherstellen, dass die .row div hat einen oberen Rand ausreichend es nach unten drücken bis zum unteren Rand der linken Spalte.

    (function ($) { 
        var top = 0; 
        var contentHeight = 0; 
    
        $(document).ready(function() { 
         calcContentHeight(); 
        }); 
    
        $(window).resize(function() { 
         calcContentHeight(); 
        }); 
    
        $(window).scroll(function() { 
         setRightTop(); 
        }); 
    
        function calcContentHeight() { 
         var contents = $('.right > .content').length - 1; 
         contentHeight = $('.right').height() * contents; 
    
         top = 0 - contentHeight; 
         setRightTop(); 
        } 
    
        function setRightTop() { 
         var rightTop = top + $(window).scrollTop(); 
    
         //1. don't allow right col top to go positive 
         if(rightTop > 0) rightTop = 0 - rightTop; 
         $('.right').css('top', rightTop + 'px'); 
    
         //2. Ensure .row has sufficient top margin 
         $('.row').css('margin-top', contentHeight + 'px'); 
        } 
    
    })(jQuery); 
    

JSFiddle hier aktualisiert Siehe: http://jsfiddle.net/u9apC/126/

habe ich Refactoring auch Ihren Code ein wenig Doppelarbeit zu reduzieren.

+0

Das ist perfekt, du bist ein Lebensretter! Vielen Dank. Ich hatte total über deine Annäherung nicht nachgedacht. Ich habe die Antwort akzeptiert und das Kopfgeld gehört dir! – egr103

+0

Super! Vielen Dank und froh, dass Sie helfen können! – beercohol

0

Sie müssen nur er machen Höhe des Körpers gleich der Gesamthöhe der Elemente in ihm. Entweder mit js oder css.

+0

Wie mache ich das genau? Obwohl ich nicht sehen kann, wie das funktionieren würde, denn wenn ich die Höhe auf 300% ändere, um 3 100% ige Höhenabschnitte aufzunehmen, bricht die Funktionalität zusammen – egr103