【问题标题】:Scroll horizontal overflow div center with javascript使用javascript滚动水平溢出div中心
【发布时间】:2019-05-16 10:35:10
【问题描述】:

我有一个水平 ul 作为 div 内的标签栏。当我单击 li 元素时,我想将父 div 中心滚动到视口。没有 jquery 怎么办?

const tab1 = document.getElementbyId('tab1');
const tabbar = document.getElementbyId('tabbar');

if (tab1) {
  tabbar.scrollLeft = -tabbar.offsetWidth
} else {
  tabbar.scrollLeft = tabbar.offsetWidth
}
<div id="tabbar" class="container">
  <ul class="tabbar">
    <li id="tab1"><a>Tab 1<a/></li>
     <li id="tab2"><a>Tab 2<a/></li>
     <li id="tab3"><a>Tab 3<a/></li>
  </ul>
</div>

我需要对此功能进行哪些更改,以便在单击第二个 li 元素时容器在每个分辨率下水平滚动到中间?

【问题讨论】:

  • 你能为此展示一个 JSFIDDLE 吗?我无法正确理解您的查询。
  • 此外,您是否需要滚动页面以使父 DIV 位于中心,或者您只想将 DIV 放置在中心而不滚动页面?
  • @TusharShukla 我需要滚动页面,以便父 DIV 位于中心。我的网站在ui-ux-design.io 可用 - 看看手机版,我想你会更好地理解我
  • 解决方案对您有用吗?

标签: javascript html css scroll


【解决方案1】:

首先获取所有元素,然后在每个元素上添加一个事件侦听器。
然后,在事件监听函数中,找到父元素的高度和屏幕的高度。
现在,根据上面的计算将屏幕顶部应用到窗口。

JS:

var tabs = document.querySelectorAll(".tablinks");

tabs.forEach(function(tab) {
  tab.addEventListener("click", function() {
    var parentDiv = document.getElementById("uix-tabbar");
    var sTop = (parentDiv.clientHeight/2) + (screen.height/2);
    window.scrollTo(0, sTop);
  });
});


如果需要更多信息,请告诉我。希望对您有所帮助!

【讨论】:

  • 我已经在您提到的链接的控制台中运行了这段代码,它按预期工作(据我了解要求)
  • 感谢您的回答,但这不是我想要的。如果单击“UI-UX-Design”选项卡,ID为“uix-tablotable”的容器应自动向左滚动,以便选项卡标签“UI-UX-Design”变得可见并居中看法。如果您然后单击选项卡“Webdesign”,则选项卡标签“Webdesign”应该会变得可见。
  • 你的意思是active标签在点击时应该居中吗?
  • 很高兴你能理解我的意思:)这正是我的意思......我该怎么做?
  • 感谢您的帮助,但您有点误解了我的意思。我不想更改选项卡的排列。我只希望在您单击选项卡“UI-UX-Design”时居中。如果您单击“企业标识”或“网页设计”,它们应该会再次完全可见。你能跟着我吗?
猜你喜欢
  • 2011-06-03
  • 1970-01-01
  • 2016-09-25
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
相关资源
最近更新 更多