Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 95 additions & 97 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,97 +1,95 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Fixed Div on Scroll</title>

<style type="text/css">
/* Spacing */
body {margin:20px;}
hr {margin:10px 0;}
#top {height:300px; margin-bottom:20px;}
#container {min-width:600px;}
/* Boxes */
.content {border:1px solid #ccc; background:#eee;}
#sidebar-inner {border:1px solid #aaa; background:#ccc;}
.content,
#sidebar-inner {padding:10px;}
/* Grid & Spacing */
#wrapper {float:left; width:100%;}
#wrapper-inner {margin-right: 320px;}
#wrapper .content {min-height:200px; }
#sidebar {float:right; width:300px; margin-left:-320px; position:relative;}
#sidebar-inner {min-height:500px;}
/* Sidebar positioning */
/* .absolute {position:absolute; width:280px;}
.fixed {position:fixed; width:280px; top:20px;}
*/
#sidebar-inner {width:280px;}
</style>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script src="js/jquery.fixed.js"></script>
<script>
$(document).ready(function(){

$('#sidebar-inner').fixed({
'top' : '20'
});

});
</script>
</head>
<body>
<div id="container">
<div id="top" class="content">

</div>

<div id="wrapper">
<div id="wrapper-inner">
<div class="content">
.content
</div>

<hr>

<div class="content">
.content
</div>

<hr>

<div class="content">
.content
</div>

<hr>

<div class="content">
.content
</div>

<hr>

<div class="content">
.content
</div>

<hr>

<div class="content">
.content
</div>

</div>
</div>

<div id="sidebar">
<div id="sidebar-inner">
.sidebar
</div>
</div>

</div>

</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Fixed Div on Scroll</title>

<style type="text/css">
/* Spacing */
body {margin:20px;}
hr {margin:10px 0;}
#top {height:300px; margin-bottom:20px;}
#container {min-width:600px;}
/* Boxes */
.content {border:1px solid #ccc; background:#eee;}
#sidebar-inner {border:1px solid #aaa; background:#ccc;}
.content,
#sidebar-inner {padding:10px;}
/* Grid & Spacing */
#wrapper {float:left; width:100%;}
#wrapper-inner {margin-right: 320px;}
#wrapper .content {min-height:200px; }
#sidebar {float:right; width:300px; margin-left:-320px; position:relative;}
#sidebar-inner {min-height:500px;}
/* Sidebar positioning */
/* .absolute {position:absolute; width:280px;}
.fixed {position:fixed; width:280px; top:20px;}
*/
#sidebar-inner {width:280px;}
</style>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script src="js/jquery.fixed.js"></script>
<script>
$(document).ready(function(){
$('#sidebar-inner').fixed({
top: 20
});
});
</script>
</head>
<body>
<div id="container">
<div id="top" class="content">

</div>

<div id="wrapper">
<div id="wrapper-inner">
<div class="content">
.content
</div>

<hr>

<div class="content">
.content
</div>

<hr>

<div class="content">
.content
</div>

<hr>

<div class="content">
.content
</div>

<hr>

<div class="content">
.content
</div>

<hr>

<div class="content">
.content
</div>

</div>
</div>

<div id="sidebar">
<div id="sidebar-inner">
.sidebar
</div>
</div>

</div>

</body>
</html>
95 changes: 45 additions & 50 deletions js/jquery.fixed.js
Original file line number Diff line number Diff line change
@@ -1,56 +1,51 @@
/*
* jQuery Fixed Div plugin v1.0.0 <https://github.com/rwbaker/jQuery.fixed/>
* @requires jQuery v1.2.6 or later
* is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
* jQuery Fixed Div plugin v1.0.0 <https://github.com/rwbaker/jQuery.fixed/>
* @requires jQuery v1.2.6 or later
* is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/

(function( $ ){
(function($){
var default_options = {
top: 0,
absolutePosition: {top: 0, left: 0}
};

$.fn.fixed = function( options ) {

var settings = {
'top' : 0
};

return this.each(function() {
// If options exist, lets merge them with our default settings
if ( options ) {
$.extend( settings, options );
}

// Set the basics
var $this = $(this);
var offset = $this.offset();
var offset = (parseInt(offset.top) - parseInt(settings.top) );

// Init
$this.css('position','absolute');

// Check if element is already passed offset; usually on page refresh
if ( $(document).scrollTop() > offset ) {
setFixed();
};

window.onscroll = function() {
//documentElement.scrollTo works for IE/Firefox (Gecko); self.pageYOffset for Chrome/Safari(Webkit))
if (document.documentElement.scrollTop > offset || self.pageYOffset > offset) {
setFixed();
$.fn.fixed = function(options) {
var o = $.extend({}, default_options, options);

} else if (document.documentElement.scrollTop < offset || self.pageYOffset < offset) {
setAb();
return this.each(function() {
// Set the basics
var $this = $(this),
offset = $this.offset(),
topOffset = (parseInt(offset.top) - parseInt(o.top) );

};
};

function setFixed() {
$this.css('position','fixed').css('top', settings.top+'px');
};

function setAb() {
$this.css('position','absolute').css('top', '0px');
};

});

};
// Init
$this.css('position', 'absolute');

// Check if element is already passed offset; usually on page refresh
if ($(document).scrollTop() > topOffset) {
setFixed();
}

window.onscroll = function() {
//documentElement.scrollTo works for IE/Firefox (Gecko); self.pageYOffset for Chrome/Safari(Webkit))
if (document.documentElement.scrollTop > topOffset || self.pageYOffset > topOffset) {
setFixed();
} else if (document.documentElement.scrollTop < topOffset || self.pageYOffset < topOffset) {
setAb();
}
};

function setFixed() {
$this
.css('position', 'fixed')
.css({top: o.top, left: offset.left});
}
function setAb() {
$this
.css('position', 'absolute')
.css(o.absolutePosition);
}
});
};
})( jQuery );