Updated
I have tried my best to reflect my scenario. The sidebar won't show at start, and it can be hidden by a user if desired. The HTML document looks like:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Starter Template for Bootstrap</title>
<link rel="canonical" href="https://getbootstrap.com/docs/4.0/examples/starter-template/">
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<!-- Custom styles for this template -->
<style>
.starter-template {
padding: 3rem 1.5rem;
text-align: center;
}
#editUnitBlock{
display: none;
width: 100%;
position: relative !important;
}
#editUnitBlock .ibox-content{
padding: 25px 0px 10px 0px;
border: 0px;
}
.floorStackColSmall {
max-width: 58.333333%;
}
.floorStackColLarge {
max-width: 83.333333%;
}
/*#unitAmenitiesLoading{
position: relative;
}*/
#unitAmenitiesLoading.sticky {
position:fixed;
top:5px;
width: inherit;
max-width: 25%;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarsExampleDefault">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="http://example.com" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu" aria-labelledby="dropdown01">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
<main role="main" class="container-fluid main-conatiner">
<div class="starter-template">
<div class="row">
<div class="col-md-2">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et augue ut risus tincidunt euismod. Nullam in justo vel nisi suscipit interdum non eu risus. Nullam consectetur justo quis feugiat tristique. Morbi vel massa non erat mollis viverra at pretium erat. Mauris non faucibus lacus. Vivamus pharetra turpis in dui tristique imperdiet. Curabitur fringilla orci ipsum, a porta dolor lobortis venenatis. Suspendisse sodales tellus tempor, dignissim ligula eu, ultricies ante. Phasellus feugiat maximus purus nec ultricies.
Donec semper ipsum in egestas semper. Curabitur gravida libero enim. Aliquam dapibus nulla in tellus molestie, in tincidunt erat accumsan. Donec ornare vitae risus ut condimentum. Donec tincidunt aliquam purus, eget tristique neque hendrerit id. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris mollis lacus at lacinia scelerisque. Suspendisse porttitor rhoncus nulla, at viverra dui suscipit vitae. Sed a metus sed nulla tempus mattis in nec est. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam consequat elit enim, non sollicitudin justo maximus sed. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean aliquet suscipit lectus tristique egestas. Phasellus ipsum orci, congue eu consectetur non, porta et neque. Cras vitae ultricies lorem. Quisque euismod suscipit erat et gravida.
Sed mattis, dolor sed maximus finibus, erat quam aliquam ipsum, et semper odio ante ut odio. Nulla fermentum arcu a tellus maximus, ac auctor justo venenatis. Pellentesque condimentum, lorem non scelerisque maximus, purus sem lobortis quam, sit amet fermentum enim orci pharetra risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis sed nulla vel nisi auctor convallis. Nulla ut consectetur odio, sit amet pellentesque leo. Vestibulum dapibus pulvinar odio sed malesuada. Quisque molestie tellus eget quam maximus, eget pellentesque eros aliquam.
Vestibulum fringilla, turpis et interdum lacinia, eros felis vulputate turpis, ut pulvinar velit lacus id lorem. Maecenas rutrum, arcu ut ultrices varius, purus nulla scelerisque ante, quis rutrum ante metus in nulla. Aenean bibendum, libero vehicula rutrum tristique, metus turpis tempus nisi, eget elementum nulla ipsum sed justo. Nunc sit amet faucibus leo, nec molestie mauris. Pellentesque sit amet ex posuere, pellentesque dolor et, porttitor ex. Sed faucibus sapien id luctus sodales. Morbi ac efficitur odio. Phasellus non molestie tortor. Sed id arcu ligula. Vestibulum ut maximus ex. Proin faucibus tincidunt tincidunt.
Donec sed pretium ipsum. Praesent nec nisl vel libero lobortis vulputate sit amet nec diam. Mauris tortor erat, egestas ut tincidunt quis, bibendum et lorem. Integer laoreet, nunc quis lobortis iaculis, ipsum sem molestie orci, nec accumsan diam enim eget mi. Mauris porttitor purus eget nulla varius accumsan. Etiam gravida tempus turpis, vel bibendum lorem ullamcorper et. Sed non massa luctus, viverra arcu et, molestie nunc. Praesent eu quam et mauris pellentesque tempus. Etiam lacinia nunc eget mauris pellentesque faucibus. Fusce turpis ante, tincidunt vel sagittis at, pretium vel urna. Ut metus dui, aliquam id eros ac, tristique convallis sem. In ut leo tincidunt, interdum turpis eget, pulvinar neque. Donec nec sagittis quam. Donec nec lorem ex. Sed quis nisl id ex efficitur sollicitudin.
</p>
</div>
<div id="floorStackTable" class="col-md-10 floorStackColLarge">
Show sidebar
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et augue ut risus tincidunt euismod. Nullam in justo vel nisi suscipit interdum non eu risus. Nullam consectetur justo quis feugiat tristique. Morbi vel massa non erat mollis viverra at pretium erat. Mauris non faucibus lacus. Vivamus pharetra turpis in dui tristique imperdiet. Curabitur fringilla orci ipsum, a porta dolor lobortis venenatis. Suspendisse sodales tellus tempor, dignissim ligula eu, ultricies ante. Phasellus feugiat maximus purus nec ultricies.
Donec semper ipsum in egestas semper. Curabitur gravida libero enim. Aliquam dapibus nulla in tellus molestie, in tincidunt erat accumsan. Donec ornare vitae risus ut condimentum. Donec tincidunt aliquam purus, eget tristique neque hendrerit id. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris mollis lacus at lacinia scelerisque. Suspendisse porttitor rhoncus nulla, at viverra dui suscipit vitae. Sed a metus sed nulla tempus mattis in nec est. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam consequat elit enim, non sollicitudin justo maximus sed. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean aliquet suscipit lectus tristique egestas. Phasellus ipsum orci, congue eu consectetur non, porta et neque. Cras vitae ultricies lorem. Quisque euismod suscipit erat et gravida.
Sed mattis, dolor sed maximus finibus, erat quam aliquam ipsum, et semper odio ante ut odio. Nulla fermentum arcu a tellus maximus, ac auctor justo venenatis. Pellentesque condimentum, lorem non scelerisque maximus, purus sem lobortis quam, sit amet fermentum enim orci pharetra risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis sed nulla vel nisi auctor convallis. Nulla ut consectetur odio, sit amet pellentesque leo. Vestibulum dapibus pulvinar odio sed malesuada. Quisque molestie tellus eget quam maximus, eget pellentesque eros aliquam.
Vestibulum fringilla, turpis et interdum lacinia, eros felis vulputate turpis, ut pulvinar velit lacus id lorem. Maecenas rutrum, arcu ut ultrices varius, purus nulla scelerisque ante, quis rutrum ante metus in nulla. Aenean bibendum, libero vehicula rutrum tristique, metus turpis tempus nisi, eget elementum nulla ipsum sed justo. Nunc sit amet faucibus leo, nec molestie mauris. Pellentesque sit amet ex posuere, pellentesque dolor et, porttitor ex. Sed faucibus sapien id luctus sodales. Morbi ac efficitur odio. Phasellus non molestie tortor. Sed id arcu ligula. Vestibulum ut maximus ex. Proin faucibus tincidunt tincidunt.
Donec sed pretium ipsum. Praesent nec nisl vel libero lobortis vulputate sit amet nec diam. Mauris tortor erat, egestas ut tincidunt quis, bibendum et lorem. Integer laoreet, nunc quis lobortis iaculis, ipsum sem molestie orci, nec accumsan diam enim eget mi. Mauris porttitor purus eget nulla varius accumsan. Etiam gravida tempus turpis, vel bibendum lorem ullamcorper et. Sed non massa luctus, viverra arcu et, molestie nunc. Praesent eu quam et mauris pellentesque tempus. Etiam lacinia nunc eget mauris pellentesque faucibus. Fusce turpis ante, tincidunt vel sagittis at, pretium vel urna. Ut metus dui, aliquam id eros ac, tristique convallis sem. In ut leo tincidunt, interdum turpis eget, pulvinar neque. Donec nec sagittis quam. Donec nec lorem ex. Sed quis nisl id ex efficitur sollicitudin.
</p>
</div>
<div class="col-md-3 " id="editUnitBlock">
<div id="unitAmenitiesLoading" class="ibox-content">
<div class="card">
<div class="card-header">
Featured
</div>
<div class="card-body">
<h5 class="card-title">SIDEBAR TO BE STICKY</h5>
HideSideBar
<p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Optio doloremque dicta consequuntur vel asperiores magnam totam, unde sequi rerum beatae excepturi praesentium dolorum nihil a. Provident asperiores alias consequuntur repudiandae.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Omnis consequatur iusto quidem nulla earum eos distinctio, tempore placeat rem, magni officia commodi mollitia qui quasi laborum. Facilis, delectus iure debitis!
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit, soluta recusandae commodi esse! Reprehenderit officia facere aliquid ipsa, totam quod illo praesentium eaque nobis, corporis placeat est esse, repellendus perferendis.
</p>
</div>
</div>
</div>
</div>
</div>
<footer id="footer">
<h2>Footer</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio asperiores suscipit aut quasi obcaecati tempora vel eum, reprehenderit dolores quidem deserunt explicabo quisquam repellendus! Possimus ex, esse in sed illum.
</p>
</footer><br type="_moz">
</div>
</main><!-- /.container -->
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script>
function editUnit(){
showEditUnitBlock();
}
function showEditUnitBlock()
{
$('#editUnitBlock').show();
// $('#unitAmenitiesLoading').floatit({
// limiter: 'footer',
// preserve_width: true,
// top_spacing: 40,
// bottom_spacing: 10,
// recalculate: true
// });
$('#floorStackTable').addClass("floorStackColSmall").removeClass("floorStackColLarge");
}
function hideEditUnitBlock()
{
$('#editUnitBlock').hide();
$('#floorStackTable').addClass("floorStackColLarge").removeClass("floorStackColSmall");
}
</script>
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script type="text/javascript" src="jquery.floatit.js"></script>
<script>
$(function(){
// $('#unitAmenitiesLoading').floatit({
// limiter: 'footer',
// preserve_width: true,
// top_spacing: 40,
// bottom_spacing: 10,
// recalculate: true
// });
// Cache our vars for the fixed sidebar on scroll
var $sidebar = $('#unitAmenitiesLoading');
// Get & Store the original top of our #sidebar-nav so we can test against it
var sidebarTop = $sidebar.position().top;
var $footer = $('#footer');
var footerTop = $footer.position().top;
// Edit the `- 10` to control when it should disappear when the footer is hit.
var blogHeight = $('#floorStackTable').outerHeight() - 10;
console.log(blogHeight);
console.log(sidebarTop);
console.log(footerTop);
// Add the function below to the scroll event
$(window).scroll(fixSidebarOnScroll);
// On window scroll, this fn is called (binded above)
function fixSidebarOnScroll(){
// Cache our scroll top position (our current scroll position)
var windowScrollTop = $(window).scrollTop();
console.log(windowScrollTop);
// Add or remove our sticky class on these conditions
if (windowScrollTop >= blogHeight || windowScrollTop <= sidebarTop || window.innerHeight + window.scrollY > blogHeight){
// Remove when the scroll is greater than our #content.OuterHeight()
// or when our sticky scroll is above the original position of the sidebar
$sidebar.removeClass('sticky');
}
// Scroll is past the original position of sidebar
else if (windowScrollTop >= sidebarTop){
// Otherwise add the sticky if $sidebar doesnt have it already!
if (!$sidebar.hasClass('sticky')){
$sidebar.addClass('sticky');
}
}
}
})
</script>
</body>
</html>
The sidebar seems to be fixed, but only whenever we scroll right to the footer. I would like the side-nav to be scrolled up instead of directly being moved to its relative position.
Please, check the code available at jsfiddle to help me to solve this issue. By the way, i am open to solving this by using any other jquery plugin or even with the custom script as well.
I am quite new to the JQuery Framework, if any one can help me by correcting the jsfiddle code it would be appriciated.
Thank You.
Please, let me know if there is anything I can do to further clarify this issue I am attempting to resolve.
Update: 2.0
I am looking something like http://webpop.github.io/jquery.pin/, here you can see that a box got pinned on the sidebar, it remained fixed upto certain scroll point then start scrolling thereafter.
You could use CSS's position: sticky; instead. This way you don't need to worry about adding a class at a certain point either.
https://jsfiddle.net/htbLm8rw/
in such cases, mostly I use "Simple sticky Sidebar" jQuery plugin. Simple Sticky Sidebar code & documentation can be found here https://github.com/ismailfarooq/simple-sticky-sidebar
See below example:
.text{
padding-bottom: 50px;
padding-top: 20px;
border-bottom: 1px solid #ccc;
}
.footer{
background: #333;
color: #fff;
padding: 30px 0;
width: 100%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<div class="container">
<header class="main-header">
<div class="container"><h3>Simple Sticky Sidebar</h3></div>
</header>
<div class="area"><h1>Simple Sticky Sidebar</h1></div>
<div class="row">
<div class="col-lg-3 col-sm-3">
<div class="sidebar">
<div class="sidebar-inner">
<div class="text"> <h2> Sidebar Content</h2></div>
<div class="text">Sidebar Content</div>
<div class="text">Sidebar Content</div>
<div class="text">Sidebar Content</div>
<div class="text">Sidebar Content</div>
<div class="text">Sidebar Content</div>
<div class="text">Sidebar Content</div>
<div class="text">Sidebar Content</div>
<div class="text">Sidebar Content</div>
</div>
</div>
</div>
<div class="col-lg-9 col-sm-9">
<div class="search-content">
<div class="content">
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p> </div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text">content</div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p> </div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text">content</div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p> </div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text">content</div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
<div class="text"><h2> Content </h2> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam id justo eu ligula laoreet sodales ut nec velit. Quisque auctor, metus a pharetra rhoncus, lorem massa scelerisque dolor, nec varius odio nulla sit amet est. Duis tempus sapien at tincidunt gravida. Suspendisse vitae malesuada eros, sed ullamcorper ante. Vivamus eget condimentum odio, sed feugiat tortor. Vestibulum accumsan, sem a auctor tincidunt, metus dui sagittis eros, eget interdum odio sem id eros. Nullam non sem at justo eleifend fermentum at vel felis. </p></div>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<h2> #FOOTER Content </h2> <br/>
#FOOTER<br/>
#FOOTER<br/>
#FOOTER<br/>
#FOOTER<br/>
#FOOTER<br/>
</div>
<!--
<script type="text/javascript" src="js/simple-sticky-sidebar.js"></script>
-->
<!-- Uncomment this script and add Simple Sticky Sidebar JS from your local. You can download Simple Sticky Sidebar from Github Repo -->
<!-- Remove below when you are working on local -->
<script>
/* ========================================================================
* Simple Sticky Sidebar
* #version 0.1
* #author Ismail Farooq <ismail_farooq#yahoo.com>
* #license The MIT License (MIT) (https://github.com/ismailfarooq/simple-sticky-sidebar/blob/master/LICENSE)
* ======================================================================== */
function setStyle(element, cssProperty) {
for (var property in cssProperty){
element.style[property] = cssProperty[property];
}
}
function destroySticky(element){
setStyle(element, {
top : '',
left : '',
bottom : '',
width : '',
position : ''
});
}
function getOffset(el) {
el = el.getBoundingClientRect();
return {
left: el.left + window.scrollX,
top: el.top + window.scrollY
}
}
function simpleStickySidebar(element, options) {
// Global options
var sticky = document.querySelector(element); // Sticky sidebar
var container = document.querySelector(options.container); // Sticky sidebar container
var topSpace = options.topSpace ? options.topSpace : 0; // Top spacing after sticky
var bottomSpace = options.bottomSpace ? options.bottomSpace : 0; // Bottom spacing after sticky
// vars
var $window = window; // window
var stickyHeight = sticky.getBoundingClientRect().height; // Sticky sidebar height
var stickyOffsetTop = getOffset(sticky).top; // Sticky sidebar top offset
var stickyOffsetBottom = getOffset(sticky).top + sticky.getBoundingClientRect().height; // Sticky sidebar bottom offset
var stickyOffsetLeft = getOffset(sticky).left; // Sticky sidebar left offset
var topFixed = false; // checkpoint
var bottomFixed = false; // checkpoint
var lastScrollVal = 0; // checkpoint
var getStickyHeight = function() {
return document.querySelector(element).getBoundingClientRect().height;
};
// scrolling
window.addEventListener('scroll', function(event) {
var scrollTop = window.scrollY;
// when scroll position touch the "Sidebar"
if(scrollTop > stickyOffsetTop - topSpace){
// if "Sidebar" smaller than viewport
if(getStickyHeight() <= $window.innerHeight - topSpace){
// fix "Sidebar" from top
setStyle(sticky, {
top : topSpace + "px",
left : stickyOffsetLeft + "px",
bottom : '',
width : sticky.getBoundingClientRect().width + "px",
position : 'fixed'
});
}
else {
// scrolling down
if (scrollTop > lastScrollVal){
// if "Sidebar" fixed from top during scrolling down
if(topFixed){
// get new offset of "Sidebar"
var absoluteStickyOffsetTop = getOffset(sticky).top;
setStyle(sticky, {
top : absoluteStickyOffsetTop - getOffset(container).top + "px",
left : '',
bottom : '',
width : '',
position : 'absolute'
});
topFixed = false;
}
// make "Sidebar" fixed from bottom when bottom area visible in viewport
if(scrollTop > stickyOffsetBottom - $window.innerHeight){
setStyle(sticky, {
top : '',
left : stickyOffsetLeft + "px",
bottom : bottomSpace + "px",
width : sticky.getBoundingClientRect().width + "px",
position : 'fixed'
});
bottomFixed = true;
}
} else { // scrolling up
// get new offset of "Sidebar" during scrolling up
var absoluteStickyOffsetTop = getOffset(sticky).top;
// if "Sidebar" fixed from bottom, stop sticky to its position
if(bottomFixed){
setStyle(sticky, {
top : absoluteStickyOffsetTop - getOffset(container).top + "px",
left : '',
bottom : '',
width : '',
position : 'absolute'
});
bottomFixed = false;
}
// make "Sidebar" fixed from top when top area visible in viewport
if(scrollTop < absoluteStickyOffsetTop - topSpace){
setStyle(sticky, {
top : topSpace + "px",
left : stickyOffsetLeft + "px",
bottom : '',
width : sticky.getBoundingClientRect().width + "px",
position : 'fixed'
});
topFixed = true;
}
}
lastScrollVal = scrollTop;
}
} else {
// make sidebar to default position
destroySticky(sticky);
}
});
}
</script>
<!-- Remove above -->
<script type="text/javascript">
simpleStickySidebar('.sidebar-inner', {
container: '.sidebar',
topSpace: document.querySelector('.main-header').getBoundingClientRect().height + 20, // or any no i.e 20
bottomSpace : document.querySelector('.footer').getBoundingClientRect().height + 20
});
</script>
Add a div inside the .col class which has to have "sticky" functionality. Give that div a class to style it with and set position: sticky on that div.
This wil allow the new div to become sticky or static based on the room in the column of the parent.
You can set the trigger offsets with top, left, right and bottom.
Checkout the snippet to see it in action.
$(function() {
// $('#unitAmenitiesLoading').floatit({
// limiter: 'footer',
// preserve_width: true,
// top_spacing: 40,
// bottom_spacing: 10,
// recalculate: true
// });
// Cache our vars for the fixed sidebar on scroll
var $sidebar = $('#unitAmenitiesLoading');
// Get & Store the original top of our #sidebar-nav so we can test against it
var sidebarTop = $sidebar.position().top;
var $footer = $('#footer');
var footerTop = $footer.position().top;
// Edit the `- 10` to control when it should disappear when the footer is hit.
var blogHeight = $('#floorStackTable').outerHeight() - 10;
// console.log(blogHeight);
// console.log(sidebarTop);
// console.log(footerTop);
// Add the function below to the scroll event
$(window).scroll(fixSidebarOnScroll);
// On window scroll, this fn is called (binded above)
function fixSidebarOnScroll() {
// Cache our scroll top position (our current scroll position)
var windowScrollTop = $(window).scrollTop();
//console.log(windowScrollTop);
// Add or remove our sticky class on these conditions
if (windowScrollTop >= blogHeight || windowScrollTop <= sidebarTop || window.innerHeight + window.scrollY > blogHeight) {
// Remove when the scroll is greater than our #content.OuterHeight()
// or when our sticky scroll is above the original position of the sidebar
$sidebar.removeClass('sticky');
}
// Scroll is past the original position of sidebar
else if (windowScrollTop >= sidebarTop) {
// Otherwise add the sticky if $sidebar doesnt have it already!
if (!$sidebar.hasClass('sticky')) {
$sidebar.addClass('sticky');
}
}
}
})
.sticky {
position: -webkit-sticky;
position: sticky;
top: 50px;
bottom: 50px;
}
.starter-template {
padding: 3rem 1.5rem;
text-align: center;
}
#editUnitBlock {
display: none;
width: 100%;
position: relative !important;
}
#editUnitBlock .ibox-content {
padding: 25px 0px 10px 0px;
border: 0px;
}
.floorStackColSmall {
max-width: 58.333333%;
}
.floorStackColLarge {
max-width: 83.333333%;
}
/*#unitAmenitiesLoading{
position: relative;
}*/
#unitAmenitiesLoading.sticky {
position: fixed;
top: 5px;
width: inherit;
max-width: 25%;
}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Starter Template for Bootstrap</title>
<link rel="canonical" href="https://getbootstrap.com/docs/4.0/examples/starter-template/">
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarsExampleDefault">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="http://example.com" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu" aria-labelledby="dropdown01">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
<main role="main" class="container-fluid main-conatiner">
<div class="starter-template">
<div class="row">
<div class="col-md-2">
<!-- Added sticky here -->
<div class="sticky">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et augue ut risus tincidunt euismod. Nullam in justo vel nisi suscipit interdum non eu risus. Nullam consectetur justo quis feugiat tristique. Morbi vel massa non erat mollis viverra
at pretium erat.
</p>
</div>
<!-- -->
</div>
<div id="floorStackTable" class="col-md-10 floorStackColLarge">
Show sidebar
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et augue ut risus tincidunt euismod. Nullam in justo vel nisi suscipit interdum non eu risus. Nullam consectetur justo quis feugiat tristique. Morbi vel massa non erat mollis viverra at pretium
erat. Mauris non faucibus lacus. Vivamus pharetra turpis in dui tristique imperdiet. Curabitur fringilla orci ipsum, a porta dolor lobortis venenatis. Suspendisse sodales tellus tempor, dignissim ligula eu, ultricies ante. Phasellus feugiat
maximus purus nec ultricies. Donec semper ipsum in egestas semper. Curabitur gravida libero enim. Aliquam dapibus nulla in tellus molestie, in tincidunt erat accumsan. Donec ornare vitae risus ut condimentum. Donec tincidunt aliquam purus,
eget tristique neque hendrerit id. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris mollis lacus at lacinia scelerisque. Suspendisse porttitor rhoncus nulla, at viverra dui suscipit vitae. Sed
a metus sed nulla tempus mattis in nec est. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam consequat elit enim, non sollicitudin justo maximus sed. Class aptent taciti sociosqu ad litora torquent
per conubia nostra, per inceptos himenaeos. Aenean aliquet suscipit lectus tristique egestas. Phasellus ipsum orci, congue eu consectetur non, porta et neque. Cras vitae ultricies lorem. Quisque euismod suscipit erat et gravida. Sed mattis,
dolor sed maximus finibus, erat quam aliquam ipsum, et semper odio ante ut odio. Nulla fermentum arcu a tellus maximus, ac auctor justo venenatis. Pellentesque condimentum, lorem non scelerisque maximus, purus sem lobortis quam, sit amet fermentum
enim orci pharetra risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis sed nulla vel nisi auctor convallis. Nulla ut consectetur odio, sit amet pellentesque leo. Vestibulum dapibus pulvinar odio
sed malesuada. Quisque molestie tellus eget quam maximus, eget pellentesque eros aliquam. Vestibulum fringilla, turpis et interdum lacinia, eros felis vulputate turpis, ut pulvinar velit lacus id lorem. Maecenas rutrum, arcu ut ultrices varius,
purus nulla scelerisque ante, quis rutrum ante metus in nulla. Aenean bibendum, libero vehicula rutrum tristique, metus turpis tempus nisi, eget elementum nulla ipsum sed justo. Nunc sit amet faucibus leo, nec molestie mauris. Pellentesque
sit amet ex posuere, pellentesque dolor et, porttitor ex. Sed faucibus sapien id luctus sodales. Morbi ac efficitur odio. Phasellus non molestie tortor. Sed id arcu ligula. Vestibulum ut maximus ex. Proin faucibus tincidunt tincidunt. Donec
sed pretium ipsum. Praesent nec nisl vel libero lobortis vulputate sit amet nec diam. Mauris tortor erat, egestas ut tincidunt quis, bibendum et lorem. Integer laoreet, nunc quis lobortis iaculis, ipsum sem molestie orci, nec accumsan diam
enim eget mi. Mauris porttitor purus eget nulla varius accumsan. Etiam gravida tempus turpis, vel bibendum lorem ullamcorper et. Sed non massa luctus, viverra arcu et, molestie nunc. Praesent eu quam et mauris pellentesque tempus. Etiam lacinia
nunc eget mauris pellentesque faucibus. Fusce turpis ante, tincidunt vel sagittis at, pretium vel urna. Ut metus dui, aliquam id eros ac, tristique convallis sem. In ut leo tincidunt, interdum turpis eget, pulvinar neque. Donec nec sagittis
quam. Donec nec lorem ex. Sed quis nisl id ex efficitur sollicitudin.
</p>
</div>
<div class="col-md-3 " id="editUnitBlock">
<div id="unitAmenitiesLoading" class="ibox-content">
<div class="card">
<div class="card-header">
Featured
</div>
<div class="card-body">
<h5 class="card-title">SIDEBAR TO BE STICKY</h5>
HideSideBar
<p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Optio doloremque dicta consequuntur vel asperiores magnam totam, unde sequi rerum beatae excepturi praesentium dolorum nihil a. Provident asperiores alias consequuntur repudiandae.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Omnis consequatur iusto quidem nulla earum eos distinctio, tempore placeat rem, magni officia commodi mollitia qui quasi laborum. Facilis, delectus iure debitis!
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit, soluta recusandae commodi esse! Reprehenderit officia facere aliquid ipsa, totam quod illo praesentium eaque nobis, corporis placeat est esse, repellendus perferendis.
</p>
</div>
</div>
</div>
</div>
</div>
<footer id="footer">
<h2>Footer</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio asperiores suscipit aut quasi obcaecati tempora vel eum, reprehenderit dolores quidem deserunt explicabo quisquam repellendus! Possimus ex, esse in sed illum.
</p>
</footer><br type="_moz">
</div>
</main>
<!-- /.container -->
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script>
function editUnit() {
showEditUnitBlock();
}
function showEditUnitBlock() {
$('#editUnitBlock').show();
// $('#unitAmenitiesLoading').floatit({
// limiter: 'footer',
// preserve_width: true,
// top_spacing: 40,
// bottom_spacing: 10,
// recalculate: true
// });
$('#floorStackTable').addClass("floorStackColSmall").removeClass("floorStackColLarge");
}
function hideEditUnitBlock() {
$('#editUnitBlock').hide();
$('#floorStackTable').addClass("floorStackColLarge").removeClass("floorStackColSmall");
}
</script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script type="text/javascript" src="jquery.floatit.js"></script>
</body>
</html>
I have an unknown number of section blocks.
I use the titles of these automaticaly generated sections to populate the "tabs" container who follow the scroll (using sticky position).
What I need, is when I pass by one of the title contained in the sections, the same title from the "tabs" bar get the class "selected"so I indicate where the user is.
But what I've tried so far is only working partialy.
Here's a working example:
let titles = [];
$.each($('section>h3'),function(){
titles.push($(this).offset().top);
});
$(document).on('mousewheel DOMMouseScroll',function(e){
let winscrollpos = $(window).scrollTop();
$.each(titles,function(i,v){
if(winscrollpos >= v && winscrollpos < v+100) {
$('.deco-tab-title').eq(i).add('.selected').toggleClass('selected');
}
});
});
.filler {
height:800px;
}
.selected {
color:red;
}
.tabs {
background-color:#eee;
position:sticky;
top:0;
}
p {
width:200px
}
.tabs h3 {
display:inline;
margin-left:50px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='main'>
<div class='filler'>
</div>
<div class='wrapper'>
<div class='tabs'><h3 class='deco-tab-title selected'>title1</h3><h3 class='deco-tab-title'></h3><h3 class='deco-tab-title'>title2</h3><h3 class='deco-tab-title'>title3</h3><h3 class='deco-tab-title'>title4</h3></div>
<div class='core'>
<section>
<h3 class='deco-tab-title'>title1</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
<section>
<h3 class='deco-tab-title'>title2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
<section>
<h3 class='deco-tab-title'>title3</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
<section>
<h3 class='deco-tab-title'>title4</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
</div>
</div>
</div>
as you can see, the first title lose the class if you scroll to the end. But nothing else. And when you go back, the second title get the class. And overall, it doesn't work so well.
You might want to use the scroll event, which also captures using the scroll bar.
Scrolling height depends on the user agent. You should compare
[offset of current tab] < winscrollpos < offset[next tab] instead of [offset of current tab] < winscrollpos < offset[current tab] + 100.
Here's a working demo:
let titles = [];
$.each($('section>h3'), function () {
titles.push($(this).offset().top);
});
$(document).on('scroll', function (e) {
// 50 for the tab title height
let winscrollpos = $(window).scrollTop() + 50;
let titleElements = $('.deco-tab-title');
$.each(titles, function (i, v) {
if (winscrollpos >= v && (i === titles.length - 1 || winscrollpos < titles[i + 1])) {
titleElements.eq(i).addClass('selected');
} else {
titleElements.eq(i).removeClass('selected');
}
});
});
.filler {
height:800px;
}
.selected {
color:red;
}
.tabs {
background-color:#eee;
position:sticky;
top:0;
}
p {
width:200px
}
.tabs h3 {
display:inline;
margin-left:50px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='main'>
<div class='filler'>
</div>
<div class='wrapper'>
<div class='tabs'><h3 class='deco-tab-title selected'>title1</h3><h3 class='deco-tab-title'>title2</h3><h3 class='deco-tab-title'>title3</h3><h3 class='deco-tab-title'>title4</h3></div>
<div class='core'>
<section>
<h3 class='deco-tab-title'>title1</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
<section>
<h3 class='deco-tab-title'>title2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
<section>
<h3 class='deco-tab-title'>title3</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
<section>
<h3 class='deco-tab-title'>title4</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
</div>
</div>
</div>
I have made the following fixes in your code:
add('.selected').toggleClass('selected'): chaining both functions this way cannot work. That's the reason why your titles were somehow blinking when selected. I've replaced this with the use of this version of toggleClass
I've added another list, nextTitlePos, in order to store, for each title, the position of the next one. For the last one, you can use any value greater than the end of your container (I've used Number.MAX_VALUE here to keep it simple, but if needed, you can use the end of the container as well.)
In the HTML code, there was also an extra <h3> tag, which was empty. This one was preventing title2 from being highlighted properly.
EDIT: I've replaced the event mousewheel with scroll as well (as mentioned by Shridhar Sharma in a comment below - thanks)
let titles = [];
$.each($('section>h3'),function(){
titles.push($(this).offset().top);
});
let nextTitlePos = [];
$.each(titles, function(i, v) {
if(i != 0) {
nextTitlePos.push(v);
}
});
nextTitlePos.push(Number.MAX_VALUE);
$(document).on('scroll DOMMouseScroll',function(e){
let winscrollpos = $(window).scrollTop();
$.each(titles,function(i,v){
let isSelected = winscrollpos >= v && winscrollpos < nextTitlePos[i];
$('div.tabs>h3.deco-tab-title').eq(i).toggleClass('selected', isSelected);
});
});
.filler {
height:800px;
}
.selected {
color:red;
}
.tabs {
background-color:#eee;
position:sticky;
top:0;
}
p {
width:200px
}
.tabs h3 {
display:inline;
margin-left:50px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='main'>
<div class='filler'>
</div>
<div class='wrapper'>
<div class='tabs'><h3 class='deco-tab-title selected'>title1</h3><!-- REMOVED <h3 class='deco-tab-title'></h3> --><h3 class='deco-tab-title'>title2</h3><h3 class='deco-tab-title'>title3</h3><h3 class='deco-tab-title'>title4</h3></div>
<div class='core'>
<section>
<h3 class='deco-tab-title'>title1</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
<section>
<h3 class='deco-tab-title'>title2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
<section>
<h3 class='deco-tab-title'>title3</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
<section>
<h3 class='deco-tab-title'>title4</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ligula sem, elementum a leo in, aliquam blandit orci. Ut scelerisque auctor tincidunt. Phasellus at dui eget nisl varius porttitor. Quisque fermentum nisi a quam consectetur, non malesuada urna maximus. Phasellus vehicula ante a felis molestie gravida vel ac augue. Duis ullamcorper malesuada nibh. Etiam non pulvinar ex. Proin rhoncus sagittis pulvinar. Suspendisse ac urna dui. Proin nec tempus augue, at molestie libero. Duis ut libero ut diam mollis pharetra et ac dui.</p>
</section>
</div>
</div>
</div>