javascript - 使用 JavaScript 滚动标签栏元素

标签 javascript css animation

先决条件

我的应用程序上有一个选项卡栏,每个选项卡标签都包含图标和文本。 用户可以通过点击选项卡在选项卡之间导航。一旦触发了边缘选项卡,其他选项卡应向左或向右移动。


预期结果

我希望它像一样工作 Web Material Component's Scrolling tabs .

enter image description here


问题

我不确定在按下边缘选项卡时如何使用纯 JavaScript 移动选项卡。其他人可以给我一些提示吗?


请看下面的代码片段:

function clickHandler(e) {
  let target = e.srcElement || e.target;
  console.log(target);
}
.flex-container {
  width: 100%;
  min-width: 50rem;
  height: 7rem;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  background: black;
  overflow: hidden;
}

.sub-menu {
  display: flex;
  flex-direction: column;
  align-items: center;
  width: 7rem;
  color: white;
  flex-grow: 1;
  min-width: 22%;
}

.sub-menu:active {
  color: gray;
}

.menu-icon {
  width: 3.2rem;
  height: 3.2rem;
  text-align: center;
}

.menu-title {
  height: 1.7rem;
  width: 7rem;
  font-size: 1.2rem;
  font-weight: bold;
  font-style: normal;
  font-stretch: normal;
  line-height: normal;
  letter-spacing: normal;
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<div class="flex-container" onclick="clickHandler(event)">
  <div class="sub-menu">
    <div class="menu-icon"><i class="fa fa-behance fa-3x"></i></div>
    <span class="menu-title">Action 1</span>
  </div>
  <div class="sub-menu">
    <div class="menu-icon"><i class="fa fa-codepen fa-3x"></i></div>
    <span class="menu-title">Action 2</span>
  </div>
  <div class="sub-menu">
    <div class="menu-icon"><i class="fa fa-eercast fa-3x"></i></div>
    <span class="menu-title">Action 3</span>
  </div>
  <div class="sub-menu">
    <div class="menu-icon"><i class="fa fa-fort-awesome fa-3x"></i></div>
    <span class="menu-title">Action 4</span>
  </div>
  <div class="sub-menu">
    <div class="menu-icon"><i class="fa fa-flickr fa-3x"></i></div>
    <span class="menu-title">Action 5</span>
  </div>
  <div class="sub-menu">
    <div class="menu-icon"><i class="fa fa-skype fa-3x"></i></div>
    <span class="menu-title">Action 6</span>
  </div>
  <div class="sub-menu">
    <div class="menu-icon"><i class="fa fa-vimeo fa-3x"></i></div>
    <span class="menu-title">Action 7</span>
  </div>
  <div class="sub-menu">
    <div class="menu-icon"><i class="fa fa-tumblr fa-3x"></i></div>
    <span class="menu-title">Action 8</span>
  </div>
  <div class="sub-menu">
    <div class="menu-icon"><i class="fa fa-twitter fa-3x"></i></div>
    <span class="menu-title">Action 9</span>
  </div>
  <div class="sub-menu">
    <div class="menu-icon"><i class="fa fa-trello fa-3x"></i></div>
    <span class="menu-title">Action 10</span>
  </div>
</div>

最佳答案

你可以试试我的代码:

function clickHandler(el) {
   const rect = el.getBoundingClientRect()
   const winWidth = window.innerWidth || document.documentElement.clientWidth
   const widthScroll = winWidth * 33 / 100
   if (rect.left <= 0 + 10)
   {
        document.getElementById('main-menu').scrollLeft -= widthScroll ;
   }
   if (rect.right >= winWidth - 10)
   {
        document.getElementById('main-menu').scrollLeft += widthScroll ;
   }
 }

这是演示链接 https://codepen.io/phuongnm153/pen/BeagOo

滚动时可以添加更多的动画效果

关于javascript - 使用 JavaScript 滚动标签栏元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56001719/

相关文章:

javascript - 在 Firebase 中结构化数据

javascript - Symfony 4/javascript - 关系上的 UniqueEntity 约束

ios - 在iOS上,如何实现流畅的动画?

javascript - 使用 Javascript 或 CSS3 制作动画?

ios - 如何使用 ViewWillLayoutSubview 为 UIView 框架设置动画

javascript - 按两个不同的标准对数组中的对象进行排序

javascript - 使用ajax从svn服务器获取文件的方法

html - 在响应式页面上使用 Facebook 'like' 按钮

javascript - 使用 rowspan 调整表的大小

javascript - .htaccess:使用 RewriteCond 但对 IMAGES/JS/CSS 文件的 href 仍然被不必要地重写