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

Ale*_*rff 28 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>
Run Code Online (Sandbox Code Playgroud)

Die*_*pez 25

替换元素href上的a属性,#而不是,例如,#collapseOne

而不是这个:

<a data-toggle="collapse" data-target="#collapseTwo" href="#collapseTwo"
     aria-expanded="true" aria-controls="collapseTwo">
Run Code Online (Sandbox Code Playgroud)

做这个

<a data-toggle="collapse" data-target="#collapseTwo" href="#"
     aria-expanded="true" aria-controls="collapseTwo">
Run Code Online (Sandbox Code Playgroud)

  • @DiegoLópez,为我创建一个空的`href =""`导致页面重新加载.我发现添加一个`href ="#0"`有助于解决这个问题.这是因为#本身会导致页面滚动到顶部.空href无效,有时会导致页面重新加载.页面上不应存在#0,因为ID不能以数字开头.因此,单击指向该ID的链接不会导致跳转到任何位置. (9认同)
  • 这将导致页面滚动到顶部. (4认同)

小智 22

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

  • 重要的是应设置data-target =“#&lt;id&gt;”。 (2认同)
  • 不是超级优雅,但是 100% 有效,而且非常简单。 (2认同)

小智 9

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

不适合我:

<a data-toggle="collapse" data-target="#collapseOne" href="#SectionOne"></a>
<a data-toggle="collapse" data-target="#collapseOne" href="#"></a>
Run Code Online (Sandbox Code Playgroud)

工作:

<a data-toggle="collapse" data-target="#collapseOne"></a>
Run Code Online (Sandbox Code Playgroud)

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

  • 没有 'href' 属性的 'a' 标签被认为是无效的 html。 (2认同)

ela*_*ris 5

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

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

/sf/answers/2672615431/

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

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

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