使用JavaScript滚动标签栏项目

时间:2019-05-06 08:47:47

标签: 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>

1 个答案:

答案 0 :(得分:1)

您可以尝试我的代码:

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

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