2016-07-20 16 views
0

Ich habe den folgenden Code:Prevent div über ein anderes div von Scrolling

<div id="header"> 
    Header 
</div> 
<div id="leftside"> 
    Left Side 
<!--A lot of text here.--> 
</div> 
<div id="right-container"> 
    <div id="one"> 
    One 
    </div> 
    <div id="two"> 
    Two 
    </div> 
</div> 
<div id="footer"> 
    Footer 
</div> 
#header { 
    background-color: blue; 
    color: white; 
    width: 80%; 
    height: 100px; 
    padding: 5px; 
} 

#leftside { 
    display: inline-block; 
    background-color: purple; 
    color: white; 
    width: 39%; 
    padding: 5px; 
    vertical-align: top; 
} 

#right-container { 
    display: inline-block; 
    background-color: green; 
    color: white; 
    width: 39%; 
    padding: 5px; 
} 
body{height:400px;} 
#one { 
    background-color: yellow; 
    color: white; 
    width: 97%; 
    height: 50px; 
    padding: 5px; 
} 

#two{ 
    background-color: orange; 
    color: white; 
    width: 37%; 
    height: 500px; 
    padding: 5px; 
    position: fixed; 
} 

#footer { 
    background-color: grey; 
    color: white; 
    width: 80%; 
    height: 500px; 
    padding: 5px; 
} 

$(document).scroll(function() { 
    var $self = $("#two"); 
    $self.css('margin-top', 0); 
    var twoOffset = $self.offset().top + $self.outerHeight(true); 
    if (twoOffset > ($("#footer").offset().top - 30)) { 
     $self.css('margin-top', -(twoOffset - $("#footer").offset().top)); 
    } else { 
     $self.css('margin-top', '30px'); 
    } 
}); 

die JSFIDDLE here See.

Das Skript verhindert, dass das div (mit id="two") über die footer div. Scrollt.

Aber ich will auch aus Scrollen über die div (mit id="one") direkt über den div (mit id="two") verhindern, wie Sie in diesem JSFIDDLE geschieht sehen.

Ich denke, das gleiche Skript könnte dafür verwendet werden, aber ich habe versucht, es ohne Erfolg anzupassen. Kannst du mir bitte helfen?

Antwort

2
var i = $('#one').offset().top; 
var x = $('#two').offset().top; 
var y = $('window').scrollTop(); 

$(window).scroll(function(){  
    $(this).scrollTop(function(){ 
     if (y <= y || x <= i) { 
      $('#two').css('position','static'); 
     }  
    }); 
}); 
+0

Danke, Mohamed. Wo ist das platziert? Vielleicht können Sie den JSFIDDLE bitte aktualisieren? – Eddy

+0

es scheint nicht zu funktionieren oder ich mache es falsch – Eddy

0

Ihr richtiger Behälter scheint vermasselt. Ich würde Ihnen raten, http://leafo.net/sticky-kit/ zu verwenden und tun

$("#two").stick_in_parent(); 
+0

Danke, Simon. Sieht gut aus, aber funktioniert noch nicht. – Eddy

+0

Es bleibt ein bisschen buggy. Reagiert nur richtig, nachdem ich zuerst einmal runterscrollen bin. Zuerst geht das klebrige Element über die Elternkanten. Einmal zurückgescrollt und erneut versucht, funktioniert es richtig. – Eddy

+0

können Sie Ihre letzten Codes teilen? –

Verwandte Themen