当用户在浏览器中滚动时隐藏按钮,并在完成后退回按钮

时间:2013-02-24 04:33:41

标签: javascript jquery css

我正在尝试在用户滚动时隐藏ID为#stats的按钮,然后我希望它在滚动完成时淡入。

出于某种原因,这在以下方面无效。

感谢您的帮助!

<button id="stats">
    <span class="icon prs">&#59146;</span><h3 id="views" class="prm">@file.views</h3>
    <span class="icon prs">&#59160;</span><h3 id="comments">20</h3>       
</button><!--end stats-->


<script>
    //fade stats in on load
    $(function(){  // $(document).ready shorthand
        $('#stats').hide().fadeIn('slow');
    });

    //hide stats when scrolling
    var $stats = $("#stats");
    var opacity = $stats.css("opacity");
    var scrollStopped;

    var fadeInCallback = function () {
        if (typeof scrollStopped != 'undefined') {
            clearInterval(scrollStopped);
        }

        scrollStopped = setTimeout(function () {
            $stats.animate({ opacity: 1 }, "slow");
        }, 200);
    };

    $(window).scroll(function () {
        if (!$stats.is(":animated") && opacity == 1) {
            $stats.animate({ opacity: 0 }, "slow", fadeInCallback);
        } else {
            fadeInCallback.call(this);
        }
    });
</script>

1 个答案:

答案 0 :(得分:4)

我会尝试简化一下,做一些更像这样的事情:

$(function(){
    var stats = $('#stats'),
        vis   = true;
        timer,


    stats.hide().fadeIn('slow');
    $(window).on('scroll', function() {
        clearTimeout(timer);
        if (vis) {
            stats.stop(true,true).fadeOut('slow');
            vis = false;
        }
        timer = setTimeout(function() {
            stats.stop(true,true).fadeIn('slow');
            vis = true;
        }, 400);
    });
});

FIDDLE