Reputation: 65
So I have this:
jQuery("document").ready(function($){
var nav = $('#nav');
var logo = '<img src="img/logo.png" />';
$(window).scroll(function () {
if ($(this).scrollTop() > 136) {
nav.addClass("nav-f");
nav.append(logo);
} else {
nav.removeClass("nav-f");
nav.remove(logo);
}
});
});
When scrolling I'm trying to make the navigation to be fixed, which works, but I also want to add a tag with the logo image in the #nav div, which also works but it appends on every scroll so when scrolling I get like 100 images of the logo.
How can I make it to append only once and when it's not scrolled more than 136px to be removed?
Upvotes: 3
Views: 14307
Reputation: 805
jQuery("document").ready(function($){
var nav = $('#nav');
var logo = '<img id="lilLogo" src="img/logo.png" />';
$(window).scroll(function () {
if ($(this).scrollTop() > 136) {
nav.addClass("nav-f");
if (!$(".nav-f").find('#lilLogo').length) {
nav.append(logo);
}
} else {
nav.removeClass("nav-f");
nav.remove(logo);
}
});
});
Upvotes: 1
Reputation: 4211
just use a boolean,
jQuery("document").ready(function($){
var nav = $('#nav');
var logo = '<img id="lilLogo" src="img/logo.png" />';
var visible = false;
$(window).scroll(function () {
if ($(this).scrollTop() > 136) {
nav.addClass("nav-f");
if(!visible) {
nav.append(logo);
visible = true;
}
} else {
nav.removeClass("nav-f");
if(visible) {
$('#lilLogo').remove();
visible = false;
}
}
});
});
The alternative is to check with $('#lilLogoID').is(':visible')
, however this would then do a search for img and check visible on every event (which would be slow)
Upvotes: 6
Reputation: 344
Add a class say scroll
to #nav
. Then inside $(window).scroll(function () {
check that whether #nav
.hasClass()
the class scroll
, if it has the do the rest or else dont..at the end of if
remove the class by .removeClass()
Upvotes: 0