Bootstrap手风琴:在折叠或展开元素时如何避免页面滚动

时间:2015-03-11 02:21:27

标签: html css twitter-bootstrap twitter-bootstrap-3

尝试折叠或展开手风琴的元素时,我有意想不到的页面滚动。也许我只是在使用bootstrap网格系统做错了什么?以下是页面示例:

如何避免这种刺激性的影响?
jsfiddle可用https://jsfiddle.net/Lfwvtyms/1/

<body>
<!--default navbar here-->
<main>
    <h1>Long long long long long long header header header header header header lng lasd lewq j</h1>
    <div class="container">
        <div class="row">
            <div class="col-xs-12">
                <div id="task-list">
                    <div id="accordion" role="tablist" aria-multiselectable="true" class="panel-group">

                        <div class="panel panel-default">
                            <div id="headingOne" role="tab" class="panel-heading"><h4 class="panel-title"><a
                                    data-toggle="collapse" data-target="#collapseOne" href="#collapseOne"
                                    aria-expanded="true" aria-controls="collapseOne">First list</a></h4></div>
                            <div id="collapseOne" role="tabpanel" aria-labelledby="headingOne"
                                 class="panel-collapse collapse in">
                                <ul class="list-group">
                                    <li class="list-group-item">Item1</li>
                                    <li class="list-group-item">Item2</li>
                                    <li class="list-group-item">Item3</li>
                                </ul>
                            </div>
                        </div>

                        <div class="panel panel-default">
                            <div id="headingTwo" role="tab" class="panel-heading"><h4 class="panel-title"><a
                                    data-toggle="collapse" data-target="#collapseTwo" href="#collapseTwo"
                                    aria-expanded="true" aria-controls="collapseTwo">Another list</a></h4></div>
                            <div id="collapseTwo" role="tabpanel" aria-labelledby="headingTwo"
                                 class="panel-collapse collapse in">
                                <ul class="list-group">
                                    <li class="list-group-item">Item1</li>
                                    <li class="list-group-item">Item2</li>
                                    <li class="list-group-item">Item3</li>
                                </ul>
                            </div>
                        </div>

                    </div>
                </div>

                <div id="someDiv">
                    <div class="row">
                        <div class="col-xs-12">
                            <div id="dummy">Div with fixed height here</div>
                        </div>
                    </div>
                </div>

            </div>
        </div>
    </div>
</main>
<footer class="container-fluid">my footer here</footer>
</body>

7 个答案:

答案 0 :(得分:24)

href元素的a属性替换为#,而不是#collapseOne

而不是:

<a data-toggle="collapse" data-target="#collapseTwo" href="#collapseTwo"
     aria-expanded="true" aria-controls="collapseTwo">

这样做

<a data-toggle="collapse" data-target="#collapseTwo" href="#"
     aria-expanded="true" aria-controls="collapseTwo">

答案 1 :(得分:18)

我有同样的问题(点击跳转到顶部触发崩溃切换的链接) href="#"已更改为href="javascript:void(0);"并且效果很好(切换崩溃而没有任何滚动到顶部)

答案 2 :(得分:8)

我有同样的问题。事实证明,href会导致问题。如果您在折叠/展开时根本不希望页面滚动,这就是我想要的,那么只需完全删除href即可。将它保留为#仍然使屏幕滚动到顶部。

对我不起作用:

<a data-toggle="collapse" data-target="#collapseOne" href="#SectionOne"></a>
<a data-toggle="collapse" data-target="#collapseOne" href="#"></a>

工作:

<a data-toggle="collapse" data-target="#collapseOne"></a>

请在此处查看我的更新: https://jsfiddle.net/Lfwvtyms/5/

答案 3 :(得分:5)

我遇到了同样的问题,我在另一篇文章中找到了我的解决方案。

除了将这一小部分Javascript添加到我的自定义.js文件之外,没有其他工作。它可以平稳地将焦点带回所选的面板标题。我改变以适应我的设计的唯一方法是到第6行的顶部距离。

https://stackoverflow.com/a/38180220/4844273

$('#accordion').on('shown.bs.collapse', function () {

    var panel = $(this).find('.in');

    $('html, body').animate({
        scrollTop: panel.offset().top - 130
    }, 500);
});

答案 4 :(得分:2)

另一种选择是使用按钮而不是锚链接,因此首先不会触发href。例如,而不是第一个<a>

<button data-toggle="collapse" data-target="#collapseOne"
  aria-expanded="true" aria-controls="collapseOne">
  First list
</button>

this documentation中有很多使用<button>代替<a>的示例。

答案 5 :(得分:0)

您可以覆盖点击处理程序,并在点击事件中使用preventDefault()方法:

$('.aHandler').click( function(event) {
    event.preventDefault();
    ...
});

&#39; aHandler&#39;是一个关于你&#39; a&#39;标签:<a class="aHandler" ...>...</a>,或其他任何有效的jquery selector

答案 6 :(得分:0)

$('.panel-group').on('click', function(){ $('html,body').stop(); });

如果你没有选择,那肯定会有用。