将引导程序下拉选择滚动条居中到所选项目

Center a Bootstrap drop-down select scroll bar to the selected item

本文关键字:选项 项目 滚动条 引导程序 选择      更新时间:2024-01-20

这里有一个关于如何将<select>滚动条居中到所选项目的问题。

我想为Bootstrap Dropdown Menu找到一种方法来做同样的事情,这样菜单就会自动滚动到.active列表项。

这里有一些代码:

<ul>
  <li class="dropdown switch">
    <a href="active" class="dropdown-toggle" data-toggle="dropdown" id="switch-a">
      <span>Name</span>
    </a>
    <ul class="dropdown-menu switch-items" id="switch-dd">
      <li>...</li>
      <li>...</li>
      <li class="active active-dd"></li>
      .
      .
      .
      <li>...</li>
    </ul>
  </li>
</ul>

这可能吗?或者我必须使用HTML <select>并花时间对其进行样式设置吗?

不仅有可能,而且实际上处理原生HTML对象比处理<select>元素样式的神秘性和不一致性要容易得多。

您只需要使用shown.bs.dropdown收听下拉打开事件
打开后,只需找到唯一的.active项并调用.focus()即可将其带入视图。

像这样

$(".dropdown").on("shown.bs.dropdown", function() {
   $(this).find(".dropdown-menu li.active a").focus()
});

堆栈代码段中的演示

$(".dropdown.focus-active").on("shown.bs.dropdown", function() {
   $(this).find(".dropdown-menu li.active a").focus()
});
.scrollable-menu {
    height: auto;
    max-height: 200px;
    overflow-x: hidden;
}
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.2/css/bootstrap.css" rel="stylesheet"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.2/js/bootstrap.js"></script>
<div class="container" >
  <div class="dropdown focus-active">
    <a href="#" class="btn btn-primary"
       data-target="#"  data-toggle="dropdown" 
       aria-haspopup="true" role="button" aria-expanded="false">
      Dropdown trigger
      <span class="caret"></span>
    </a>
    <ul class="dropdown-menu scrollable-menu" role="menu" aria-labelledby="dLabel">
      <li><a href="#">Item 1</a></li>
      <li><a href="#">Item 2</a></li>
      <li><a href="#">Item 3</a></li>
      <li><a href="#">Item 4</a></li>
      <li><a href="#">Item 5</a></li>
      <li><a href="#">Item 6</a></li>
      <li><a href="#">Item 7</a></li>
      <li><a href="#">Item 8</a></li>
      <li class="active"><a href="#">Item 9</a></li>
      <li><a href="#">Item 10</a></li>
      <li><a href="#">Item 11</a></li>
      <li><a href="#">Item 12</a></li>      
    </ul>
  </div>
</div>

没有jquery的事件处理程序:

const activeOptionCollection = document.getElementsByClassName('active');
  if (activeOptionCollection.length > 0) {
    const [activeOption] = activeOptionCollection;
    activeOption.scrollIntoView();
  }