How to imitate fixed positioning on a <nav> element using jQuery? - javascript

I do not want to use normal fixed positioning because then the text below the nav bar will get pushed to the top, blocked by the nav bar itself. I am looking for an alternate method using jQuery that will keep the nav bar in the same position despite how much the window has scrolled.
My current code:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
$(document).ready(function(){
$('nav').on('scroll', function(e) { //Cancel the normal course of action for the nav bar
e.preventDefault();
});
var y = $('nav').offset().top;
$('nav').on('scroll', function() { //Continuously update top value to remain at top of window
var z = y + $(window).scrollTop();
$(nav).css("top", z + "px");
});
});
</script>
</head>
<body>
<nav>
<a>
Link1
</a>
<a>
Link2
</a>
</nav>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus.
</body>
</html>
All help will be appreciated.

You don't need the preventDefault part
The scroll event is triggered on window
Use variables
The nav needs a position:absolute
Here is a working fiddle: http://codepen.io/anon/pen/jPeQMp
$(function(){
var $window = $(window),
$nav = $('nav').css('position', 'absolute'),
initialTop = $nav.offset().top;
$window.on('scroll', function() {
$nav.css('top', initialTop + $window.scrollTop() + 'px');
});
});

Related

call a resize event - that is not reacting on scroll?

I want a div to have the min-height of the viewport.
Therefor I use Javascript to detect the window height and set a style property (because of mobile browser height behavior).
https://css-tricks.com/the-trick-to-viewport-units-on-mobile/
I want to resize the height in case of orientationchange or if the browser window changes.
So, I created a resize event.
And here is my problem - the resize event also gets fired when you scroll the page.
So there is this ugly jump in the content on scrolling down.
Does anyone have a solution for this problem?!
It bothers me so often :(
Edit - here is a simple example:
var vpHeight = window.innerHeight;
// set style property
document.documentElement.style.setProperty('--vpHeight', `${vpHeight}px`);
// do the same on resize
window.addEventListener('resize', () => {
var vpHeight = window.innerHeight;
document.documentElement.style.setProperty('--vpHeight', `${vpHeight}px`);
});
* {
margin:0;
padding:0;
}
body {
background-color:salmon;
}
#fullheight {
width:100%;
background-color:lavender;
display:block;
position:relative;
height:var(--vpHeight, 100vh);
}
#fullheight::after {
content:'';
position:absolute;
bottom:0;
left:50%;
margin-left:-25px;
width:50px;
height:50px;
background-color:black;
}
<div id="fullheight"></div>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi.</p>
<p>Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia.</p>
<p>Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu.</p>
<p>Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique.</p>
It is not that a resize event is being called on every scroll, but there is actually a resize on the user scrolling at first on some mobiles, or subsequently when they go back to the first page top - it's the tabs at the top of the browser window that come and go - the reason 100vh doesn't 'work' as one would expect. This was done in the mobile browsers to stop a jump effect when doing 'ordinary' scrolling, but of course in this case the layout is altered depending on actual screen size usable.
One slight mitigation is to make the height change transition so it's less of a jerky experience. It's still feeling a bit different from a normal scroll without height change, but is less of an annoyance I think.
(Note, the phenomenon isn't seen on an SO snippet, run this code in your browser on an actual device).
<style>
* {
margin:0;
padding:0;
}
body {
background-color:salmon;
}
#fullheight {
width:100%;
background-color:lavender;
display:block;
position:relative;
height:var(--vpHeight, 100vh);
transition: height 0.3s; /* ADDED */
}
#fullheight::after {
content:'';
position:absolute;
bottom:0;
left:50%;
margin-left:-25px;
width:50px;
height:50px;
background-color:black;
}
</style>
<div id="fullheight"></div>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi.</p>
<p>Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia.</p>
<p>Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu.</p>
<p>Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique.</p>
<script>
var vpHeight = window.innerHeight;
// set style property
document.documentElement.style.setProperty('--vpHeight', `${vpHeight}px`);
// do the same on resize
window.addEventListener('resize', () => {
var vpHeight = window.innerHeight;
document.documentElement.style.setProperty('--vpHeight', `${vpHeight}px`);
});
</script>

jQuery Accordion tab color issue

I'm having an issue with the tabs of my Accordion staying the color that I want them to stay during certain times.
I want the Tabs to stay a cream white color at default and change dark grey when cursor is hovering. When you click the tab it will become active and change the color to cyan. Trouble is that when I have 1 tab open and click another tab, the first tab will stay cyan. And when I click a tab and and click it again to slide the content up the hover function to make the tab turn dark grey doesn't work.
I want it to be cyan only when active and the contents are displayed, and when there is no content displayed and the block is closed, I want the color to go cream white and at cursor hover dark grey.
Code:
$(document).ready(function(){
$(".tab").click(function(){
$(".tab").removeClass("tab-active");
$(this).addClass("tab-active");
var current_state=$(this).next().css("display");
$(".contents").slideUp();
if(current_state!="block")
{
$(this).next().slideDown();
}
if($(this).hasClass("tab-active")==true && current_state!="block")
{
$(this).css({"backgroundColor":"cyan","color":"black"});
}
else
{
$(this).css({"backgroundColor":"#E6E6E6"});
}
});
});
CSS:
.container{width:100%; float:left;}
.tab-container{width:800px; min-height:300px; float:left; margin-top:100px; margin-left:300px;}
.tab{border:1px solid black; width:798px; height:26px; border-radius:5px; float:left; background-color:#E6E6E6;}
p{float:left; margin-left:10px; margin-top:1px; font-size:22px;}
.content-active{display:block;}
.contents{border:1px solid black; width:800px; min-height:30px; float:left; display:none;}
.tab:hover{background-color:#A4A4A4; color:white; cursor:pointer;}
HTML:
<body>
<div class="container">
<div class="tab-container">
<div class="tab tab-active">
<p>Beer</p>
</div>
<div class="contents content-active">
<span>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum</span>
</div>
<div class="tab">
<p>Wine</p>
</div>
<div class="contents">
<span>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum</span>
</div>
<div class="tab">
<p>Juice</p>
</div>
<div class="contents">
<span>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum</span>
</div>
<div class="tab">
<p>Water</p>
</div>
<div class="contents">
<span>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum</span>
</div>
<div class="tab">
<p>Soda</p>
</div>
<div class="contents">
<span>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum</span>
</div>
</div>
</div>
</body>
The problem is that your jQuery is applying an inline style to the active tab and it never goes away. A better solution is to cut those lines from the JS and simply assign the style to the class .tab-active.
Cut this:
if($(this).hasClass("tab-active")==true && current_state!="block") {
$(this).css({"backgroundColor":"cyan","color":"black"});
} else {
$(this).css({"backgroundColor":"#E6E6E6"});
}
And add this to your CSS:
.tab-active {
background-color: cyan;
}

How to get nicEdit Text area height?

I am using nicEdit for a project, I have a problem as my project is completely dynamic the client wants, when they copy paste any text to the nicEdit text editor the div has to auto resize, for that I need the to find the height of which i am not able to get. I have done a jsFiddle
I have not used any jquery to find the height thinking it might conflict with nicEdit script file
<div id="StatusEntry" rows=10 cols=50 contenteditable="true">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc,
</div>
This is just the html i have used. Please anyone can help me on this would be thankfull.
Thanks in advance
you can get div height by using js as like this
var height=$('#StatusEntry').height();
var height=$('#StatusEntry').height();
$div.on('resize',function(){
clearTimeout(timer);
timer = setTimeout(function(){
$("#StatusEntry").height(height());
});
});``

Reverse scroll element using jQuery

HAVE FOUND THE SOLUTION FOR BELOW PROBLEM : here is the Js Fiddle
special thanks to jonhkr
I have been working on reverse scroll in jquery and i need help with it. My stuff/code : Js Fiddle
Achieved:
when the content is scrolled down the rocket moves up.
Problem:
When the rocket is dragged up the content has to scroll down.
adding "containment" to the drag-able doesn't seem to work.
this has to work with overflow as hidden.
For those without Fiddle:
HTML:
<div id="test">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas eget nisi ipsum. Donec semper, justo at fringilla condimentum, felis tellus ultricies dolor, id convallis metus nulla quis est. Vivamus facilisis orci vel lectus blandit commodo blandit sem tempor. Curabitur condimentum, diam quis pretium feugiat, sem ante pretium tortor, in lobortis massa eros vitae dui. Nullam nisi mauris, condimentum a feugiat in, euismod quis augue. Maecenas euismod adipiscing tellus. Aliquam elementum egestas dolor, vel aliquam nulla tincidunt eget. Etiam risus elit, scelerisque eu volutpat sed, faucibus non ante. Donec sed nunc erat, eget facilisis risus. Etiam id odio tortor. Sed aliquam viverra volutpat. Sed gravida lectus eu mi ornare in feugiat magna elementum. Pellentesque in dolor ligula.
Maecenas condimentum nisl eget arcu elementum nec imperdiet risus lobortis. Suspendisse id placerat turpis. Etiam dolor quam, placerat et volutpat nec, ultricies sed lorem. Fusce volutpat lobortis est ut pellentesque. Donec enim mauris, pretium quis gravida vitae, pellentesque ac nibh. Proin condimentum aliquam scelerisque. Vestibulum aliquet pharetra dapibus. Donec id nisi non nibh fringilla auctor et eget erat. Morbi pretium mauris sed orci pretium aliquam. Nulla pharetra venenatis nunc, in venenatis purus tempor vitae. Vivamus tincidunt dui non eros gravida sit amet consectetur nibh lacinia.
Maecenas semper ligula et urna tincidunt placerat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse arcu urna, facilisis at tempus id, posuere sed lacus. Vestibulum in feugiat tellus. Nullam suscipit, velit nec tincidunt pellentesque, enim odio ornare mauris, quis faucibus sem sapien sed turpis. Nulla sit amet risus in magna iaculis scelerisque sit amet vel erat. Morbi eu vestibulum nulla. Etiam auctor auctor felis, nec sodales velit condimentum non. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis eu massa diam, eu porttitor eros. Etiam blandit, turpis ac volutpat gravida, massa lorem congue orci, eget fringilla eros felis quis elit. Suspendisse quam tellus, pretium non mattis ut, laoreet in diam. Suspendisse ante odio, venenatis vel condimentum vitae, varius id sapien. Quisque ac nunc ipsum. Mauris porttitor blandit magna, id rutrum ipsum pellentesque non. In suscipit diam ligula, non tristique diam.
Aliquam interdum ante at nisl sagittis vel luctus eros fringilla. Vestibulum purus orci, ultrices at tristique et, malesuada eget enim. Praesent commodo erat vel massa auctor id elementum elit elementum. Duis diam urna, mollis ut imperdiet aliquam, commodo id dui. Etiam vulputate facilisis dui id convall
</div>
<div id="track">
<div id="rocket">
</div>
</div>
<div id="xpos" style="clear:both">
</div>
CSS:
#track {
height: 400px;
width: 48px;
overflow: hidden;
margin: 10px 0 0 10px;
background:#ccc;
float:left;
}
#rocket{
height:48px;
width:48px;
background:#ccc url('http://www.veryicon.com/icon/preview/System/GANT%203/Rocket,%20This%20is%20a%20damn%20good%20Icon.jpg');
}
​
JS (JQuery 1.8.2 & Jquery UI):
$(document).ready(function() {
$(function() {
var left = parseInt($('#track').css('margin-left'), 10);
var top = parseInt($('#track').css('margin-top'), 10);
$("#rocket").draggable({
containment: "#track",
axis: "y",
scroll: false,
drag: function(event, ui) {
// Show the current dragged position of image
var currentPos = $(this).position();
$("div#xpos").text("CURRENT: \nLeft: " + (currentPos.left - left) + "\nTop: " + (currentPos.top - top));
}
});
});
});​
I changed a bit your code to solve these problems:
Adding "containment" to the drag-able doesn't seem to work.
var draggingRocket = false;
$("#test").scroll(function(event) {
if(!draggingRocket){
var st = $(this).scrollTop();
var pos = iHeight - (st / cr);
$("#rocket").css("top", pos);
}
});
//rocket drag
$("#rocket").draggable({
containment: $('#track'),
axis: "y",
scroll: false,
start: function(event, ui) {
draggingRocket = true;
},
drag: function(event, ui) {
// Show the current dragged position of image
var currentPos = $(this).position();
$("div#xpos").text("CURRENT: \nLeft: " + (currentPos.left - left) + "\nTop: " + (currentPos.top - top));
$("#test").scrollTop(currentPos.top);
},
stop: function(event, ui) {
draggingRocket = false;
}
});
First of all, good work.
Well I don't think your solution is far-fetched. Basically you need to use
$("#test").scrollTop((top - currentPos.top)*cr);
to set the scrollTop of the div test. The equation I have used it not accurate, but you can change it accordingly.
Hope this gives you lead:
Demo: http://jsfiddle.net/CZvWC/7/

How come dynamically assigning a name using javascript fails?

I am trying to dynamically assign a name attribute to a level 2 header using jQuery.
http://jsfiddle.net/8ZTEb/
Here is my javascript:
$(function() {
$("h2").each(function() {
$(this).attr("name", $(this).html().toLowerCase());
});
});​
Here is my long, but simple HTML.
Bar
<h2>Foo</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu sollicitudin urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In tincidunt magna vel quam auctor sit amet tincidunt lacus euismod. Praesent bibendum odio nec nisl tempus dictum. Cras aliquet condimentum est luctus accumsan. Aenean lectus lacus, malesuada eu dictum eu, euismod ac purus. Aliquam ultrices egestas elit, nec scelerisque lorem suscipit in. In auctor bibendum ullamcorper. Aenean lectus arcu, fermentum sed aliquet quis, tristique vestibulum est. In nisi ligula, consequat non semper vitae, pharetra vel risus. Nulla odio augue, tincidunt quis bibendum id, ullamcorper vel eros. Proin feugiat imperdiet tellus, ut porttitor massa eleifend in. Praesent sed nisl sed dui vestibulum auctor. Maecenas viverra feugiat erat adipiscing porttitor. Aenean mattis tincidunt placerat.
</p>
<p>
Fusce aliquam, dui a facilisis porttitor, nisi dolor semper dolor, ac vestibulum elit lorem id lorem. Nam ut odio eros. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat tempor volutpat. Vestibulum cursus purus et nulla dignissim suscipit. Cras convallis dolor nec dolor volutpat vel rutrum magna eleifend. Nullam eget lorem orci. Vestibulum vel aliquam ligula.
</p>
<p>
Aliquam in tellus odio, ut gravida ante. Vestibulum vitae diam elementum dui ultricies hendrerit quis vitae ante. Vestibulum vel metus metus. Nulla in nulla et risus dictum lobortis at ac ligula. Nunc in dolor id sapien facilisis porttitor id vitae magna. Integer pretium faucibus felis, vitae tristique est condimentum egestas. Suspendisse potenti. Duis auctor molestie sapien, sed vestibulum dolor ornare in. Praesent lacus purus, luctus non suscipit eget, aliquet in nunc. Etiam bibendum, erat ut blandit vehicula, augue diam vestibulum ipsum, ut imperdiet libero est sit amet tortor. Quisque gravida porttitor augue, eu hendrerit libero ullamcorper eget. Sed at tortor nisi, a luctus nunc. Curabitur in fringilla velit. Nulla elementum hendrerit ante ac faucibus. Mauris ultrices pretium erat sit amet scelerisque.
</p>
<p>
Integer dictum diam vel orci laoreet vehicula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec eu commodo dui. Quisque a diam mauris. Curabitur ornare sollicitudin ligula, in fringilla ligula porttitor et. Proin bibendum tincidunt orci, eget iaculis sem venenatis et. Integer eu eros magna, sed placerat augue. Cras eget est purus. Duis convallis gravida tempus. Curabitur a dolor ut nisl sodales rutrum. Maecenas eget diam quis turpis scelerisque mattis eget ac sapien. Sed commodo mattis tellus, sit amet tempor ligula placerat at.
</p>
<p>
Sed ornare faucibus tincidunt. Sed suscipit metus a massa feugiat dignissim. Maecenas auctor vulputate placerat. Vivamus pulvinar pharetra tincidunt. Nunc tempus ornare interdum. Vestibulum vitae magna lorem, quis luctus augue. Phasellus quam leo, dignissim vitae semper a, iaculis et lacus. Sed elit nunc, interdum sit amet dictum vitae, fermentum eget lorem. Phasellus nisi dui, varius ut lacinia et, condimentum sed tortor. Fusce eu orci et justo rutrum varius sit amet quis enim. Suspendisse id urna eget odio pellentesque lacinia in ut neque. Vestibulum ante lectus, placerat ac mattis vitae, tincidunt quis tortor. Morbi vel sem ut quam dignissim faucibus ut eu lorem. Aliquam laoreet arcu nec urna eleifend consectetur. Suspendisse potenti.
</p>
<h2>Bar</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu sollicitudin urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In tincidunt magna vel quam auctor sit amet tincidunt lacus euismod. Praesent bibendum odio nec nisl tempus dictum. Cras aliquet condimentum est luctus accumsan. Aenean lectus lacus, malesuada eu dictum eu, euismod ac purus. Aliquam ultrices egestas elit, nec scelerisque lorem suscipit in. In auctor bibendum ullamcorper. Aenean lectus arcu, fermentum sed aliquet quis, tristique vestibulum est. In nisi ligula, consequat non semper vitae, pharetra vel risus. Nulla odio augue, tincidunt quis bibendum id, ullamcorper vel eros. Proin feugiat imperdiet tellus, ut porttitor massa eleifend in. Praesent sed nisl sed dui vestibulum auctor. Maecenas viverra feugiat erat adipiscing porttitor. Aenean mattis tincidunt placerat.
</p>
<p>
Fusce aliquam, dui a facilisis porttitor, nisi dolor semper dolor, ac vestibulum elit lorem id lorem. Nam ut odio eros. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat tempor volutpat. Vestibulum cursus purus et nulla dignissim suscipit. Cras convallis dolor nec dolor volutpat vel rutrum magna eleifend. Nullam eget lorem orci. Vestibulum vel aliquam ligula.
</p>
<p>
Aliquam in tellus odio, ut gravida ante. Vestibulum vitae diam elementum dui ultricies hendrerit quis vitae ante. Vestibulum vel metus metus. Nulla in nulla et risus dictum lobortis at ac ligula. Nunc in dolor id sapien facilisis porttitor id vitae magna. Integer pretium faucibus felis, vitae tristique est condimentum egestas. Suspendisse potenti. Duis auctor molestie sapien, sed vestibulum dolor ornare in. Praesent lacus purus, luctus non suscipit eget, aliquet in nunc. Etiam bibendum, erat ut blandit vehicula, augue diam vestibulum ipsum, ut imperdiet libero est sit amet tortor. Quisque gravida porttitor augue, eu hendrerit libero ullamcorper eget. Sed at tortor nisi, a luctus nunc. Curabitur in fringilla velit. Nulla elementum hendrerit ante ac faucibus. Mauris ultrices pretium erat sit amet scelerisque.
</p>
<p>
Integer dictum diam vel orci laoreet vehicula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec eu commodo dui. Quisque a diam mauris. Curabitur ornare sollicitudin ligula, in fringilla ligula porttitor et. Proin bibendum tincidunt orci, eget iaculis sem venenatis et. Integer eu eros magna, sed placerat augue. Cras eget est purus. Duis convallis gravida tempus. Curabitur a dolor ut nisl sodales rutrum. Maecenas eget diam quis turpis scelerisque mattis eget ac sapien. Sed commodo mattis tellus, sit amet tempor ligula placerat at.
</p>
<p>
Sed ornare faucibus tincidunt. Sed suscipit metus a massa feugiat dignissim. Maecenas auctor vulputate placerat. Vivamus pulvinar pharetra tincidunt. Nunc tempus ornare interdum. Vestibulum vitae magna lorem, quis luctus augue. Phasellus quam leo, dignissim vitae semper a, iaculis et lacus. Sed elit nunc, interdum sit amet dictum vitae, fermentum eget lorem. Phasellus nisi dui, varius ut lacinia et, condimentum sed tortor. Fusce eu orci et justo rutrum varius sit amet quis enim. Suspendisse id urna eget odio pellentesque lacinia in ut neque. Vestibulum ante lectus, placerat ac mattis vitae, tincidunt quis tortor. Morbi vel sem ut quam dignissim faucibus ut eu lorem. Aliquam laoreet arcu nec urna eleifend consectetur. Suspendisse potenti.
</p>​
Why does clicking on the inline anchor labeled "Bar" not go anywhere on the page?
Your link is looking for an element with the name "bar" not "foo".
Bar would find your H2 if the H2 was <h2 name="bar">Foo</h2> and not <h2 name="foo">Foo</h2> as it is now. You're assigning the html of the H2 element (foo) as the H2's name attribute when you want it to be "bar" which is the html of the anchor.
You can either change your link to Bar or change your jQuery.
Update: Your code should work for most elements, however for the greatest compatibility you might also want to make sure the element has the same ID and name value.
The HTML5 standard suggests using the ID attribute instead of the name attribute for specifying the name of an anchor. Using the ID attribute should work for HTML4 in all modern browsers.
See also: http://www.w3.org/TR/html401/struct/links.html#h-12.2.3 and http://www.w3.org/TR/html5/links.html#hyperlink
It sounds like you instead want to scroll based on the element's position on the page. You should instead find the offset of a specific element (which you can do via jQuery), and then call window.scrollTo(offset) like so:
Bar
$('.scrollableLink').click(function()
{
// Some syntax might not be correct on the selector, but you get the general idea
var offset = $('[name=' + $(this).text() + '").prop('offsetTop');
window.scrollTo(offset);
});
The <a name=''><h2>Lorem Ipsum</h2></a> is the syntax your looking for. I use the wrap function of jQuery to add the correct anchor references. fiddle for your thoughts
javascript
$(function() {
$("h2").each(function(index,elem) {
$(this).wrap("<a name='"+$(this).text().toLowerCase()+"'></a>");
});
});​

Categories