使用jQuery slideToggle向上滑动面板。

3
我想制作一个可展开的页脚,在点击“+”号时展开。 一开始,我的页脚只有版权信息和社交媒体链接。当点击符号时,我希望站点地图(和其他一些内容)滑动到版权信息上方。
然而,我需要确保页面完全向下滚动。如果没有滚动,面板将会滑动,但您将无法看到它。
这是我现在拥有的:
HTML
<div id="footer-wrapper" class="clearfix">
    <footer>
        <span id="footer-expander">+</span>
        <section id="footer-hidden" class="clearfix">
            <section id="sitemap" class="cols-3">
                <h1>Sitemap</h1>
                <ul>

                    <li><a href="">Home</a></li>
                    <li><a href="">About</a></li>
                    <li><a href="">Portfolio</a></li>
                    <li><a href="">Blog</a></li>
                    <li><a href="">Contact</a></li>
                </ul>
            </section>
            <section class="cols-3">
                <h1>Something else</h1>
            </section>
            <section class="cols-3">
                <h1>Last, but not least.</h1>
            </section>
        </section>
        <section id="footer-show" class="clearfix">
            <p>&copy; Helena Standaert.</p>
            <section id="btm-socialmedia" class="socialmedia">
                <ul>
                    <li class="twitter"><a href="">Twitter</a></li>
                    <li class="facebook"><a href="">Facebook</a></li>
                    <li class="linkedin"><a href="">LinkedIn</a></li>
                    <li class="rss"><a href="">RSS-feed</a></li>
                </ul>
            </section>
        </section>
    </footer>
</div>

JQUERY
$('#footer-expander').click(function(){
    $('#footer-hidden').slideToggle('slow', function(){
        goToByScroll('footer-wrapper')
        if($('#footer-expander').html('-')){
            $('#footer-expander').html('+');
        }
        if($('#footer-expander').html('+')){
            $('#footer-expander').html('-');
        }
    });
})
2个回答

1
简化版,创建一个滚动间隔,当滚动时关闭该间隔。
var pageScroller = setInterval(function(){ 
                       scrollTo(0, document.scrollHeight)}, // Scroll to bottom
                       100 // every 100 ms correct. Can be 50, or 25, or whatever
                    );
$('#footer-hidden').slideToggle(600, function(){
    clearInterval( pageScroller ); // stop the interval which was scrolling
});

谢谢!不过,我不得不将document.offsetHeight更改为document.body.scrollHeight,因为页面会滚动到页面顶部。 - Helena Standaert
1
更改了解决方案 :) 现在其他人也可以使用它了。 - Martijn

0

更简单的方法是使用sliteToggle的STEP选项。

只需使用以下javascript进行更新(将FOOTER_CONTAINER更改为应该是页脚包装器的适当元素):

$('#footer-expander').click(function(){
    $('#footer-hidden').slideToggle({duration: 'slow', step: function(){
        $(FOOTER_CONTAINER).scrollIntoView(false);
    }, complete: function(){
      goToByScroll('footer-wrapper')
        if($('#footer-expander').html('-')){
            $('#footer-expander').html('+');
        }
        if($('#footer-expander').html('+')){
            $('#footer-expander').html('-');
       }
    }});
});

有了这个,函数

$(FOOTER_CONTAINER).scrollIntoView(false);

该函数将在每一步调用,并将滚动您的容器到视图中(false将其与底部对齐)。


1
小提示,对于一些人可能很重要:如果您的动画速度较慢(比如10秒),step函数会被频繁调用。这不一定是问题,但需要注意。 - Martijn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接