2017-11-07 19 views
2

#pre-footerまたは#footer divがウィンドウに表示されている場合、クラス.hiddenをスティッキメニューに切り替える必要があります。ウィンドウ内に別のdivが表示されているときに要素を非表示にする

私はjqueryとscrollTop();を使いこなしていますが、それを実現するようには見えません。だから、基本的には、ビューポートの底は#pre-footerの底部と整列されたときに、クラスを切り替えたいhttps://jsfiddle.net/gavinfriel/4tcjnoxp/5/

答えて

3

:すべてのヘルプは、これまで

$(document).ready(function() { 
    var $window = $(window); 
    var tabwrap = $('.tab-wrap'); 
    var prefooter = $('#pre-footer'); 
    $window.on('scroll', function() { 
    var scrollTop = $window.scrollTop(); 
    tabwrap.toggleClass('hidden', scrollTop > 300); /* Help! */ 
    /* .tabwrap should toggle class .hidden when #pre-footer and or #footer is visible in window */ 
    }); 
}); 

フィドルをいただければ幸いです。だから、ときscrollTop値+ビューポートの高さが#pre-footer

$(document).ready(function() { 
    var $window = $(window); 
    var tabwrap = $('.tab-wrap'); 
    var prefooter = $('#pre-footer'); 
    var prefooter_top = prefooter.offset().top; 
    var prefooter_height = prefooter.height(); 
    var prefooter_bottom = prefooter_top + prefooter_height; 
    console.log(prefooter_bottom); 
    $window.on('scroll', function() { 
    var scrollTop = $window.scrollTop(); 
    var viewport_height = $(window).height(); 
    var scrollTop_bottom = scrollTop + viewport_height; 
    tabwrap.toggleClass('hidden', scrollTop_bottom > prefooter_bottom); 
    }); 
}); 
+0

pre-footer +高さの最上部の位置よりも大きく、そして、あなたはほとんどあります。 if文でaddClass()を使用し、else文でremoveClass()を使用する必要があります。 – mdurchholz

+0

@mdurchholz私はもう一度チェックした...私は離れていると思う!このコードは、インジェティアルコードとまったく同じです。 –

+0

乾杯!しかし、 '#pre-footer'や'#footer'がビューポートに表示されているかどうかを問い合わせる方法はありますか?上から300pxと言っているのとは対照的に? –

0
var tabwrap = $('.tab-wrap'); 
var prefooter = $('#pre-footer'); 

/** 
* @desc Check to see if element is inside the viewport 
*/ 
$.fn.isInViewport = function() { 
    var element  = $(this), 
     elementHt = element.outerHeight(), 
     elementTop = element.offset().top, 
     elementBot = elementTop + elementHt, 

     viewportTop = $(window).scrollTop(), 
     viewportBot = viewportTop + $(window).outerHeight(), 

     offset  = 0.35 * elementHt; // pecentage of top and bottom 

    return (elementBot - offset) > viewportTop && (elementTop + offset) < viewportBot; 
}; 


function checkOffset() 
{ 
    if(prefooter.isInViewport()) 
     tabwrap.addClass('hidden'); 
    else 
     tabwrap.removeClass('hidden'); 
} 

$(window) 
.load(function(){ checkOffset(); }) 
.scroll(function(){ checkOffset(); }); 
関連する問題