简体   繁体   English

Javascript - 在水平滚动菜单中的页面加载时自动滚动到活动菜单项

[英]Javascript - Auto-scroll to an active menu item on page load in horizontal scrolling menu

Try to create a horizontal scrolling menu for mobile devices with CSS and Pure JavaScript.尝试使用 CSS 和纯 JavaScript 为移动设备创建一个水平滚动菜单。 I had created a bellow structure to achieve this and which is looks good.我创建了一个波纹管结构来实现这一点,看起来不错。 Now, I need to auto-scroll to active nav item on page load using Javascript, It seems if the last item having active class it was hidden.现在,我需要使用 Javascript 在页面加载时自动滚动到活动导航项目,似乎最后一个具有活动类的项目被隐藏了。 The active class is dynamically set through back-end codes.活动类是通过后端代码动态设置的。 I have tried with some JavaScript but not working perfectly.我尝试过一些 JavaScript,但效果不佳。

 window.onload = function () { document.getElementsByClassName('nav-menu')[0].scrollLeft = 0; var menus = document.getElementsByClassName('nav-menu__item'); for (var i = 0; i < menus.length; i++) { if (menus[i].classList.contains('active')) { document.getElementsByClassName('nav-menu')[0].scrollLeft = menus[i].offsetLeft; } } }
 .account-nav{ padding:0; margin: 0 0 30px; } .account-nav__container{ margin:0; padding:0; border-bottom: 1px solid #757575; } .account-nav__container .nav-menu{ display:flex; list-style: none; overflow-x: auto; -webkit-overflow-scrolling: touch; -ms-overflow-style: -ms-autohiding-scrollbar; scrollbar-width: none; } .account-nav__container .nav-menu::-webkit-scrollbar { display: none; } .account-nav__container .nav-menu .nav-menu__item{ display:block; margin-right:20px; margin-bottom:-1px; white-space: nowrap; } .account-nav__container .nav-menu .nav-menu__item.active{ border-bottom: 2px solid black; } .account-nav__container .nav-menu .nav-menu__item .nav-menu__item--link{ display:block; padding:15px 0; text-decoration:none; text-align:left; } .account-nav__container .nav-menu .nav-menu__item .nav-menu__item--link:active, .account-nav__container .nav-menu .nav-menu__item .nav-menu__item--link:hover, .account-nav__container .nav-menu .nav-menu__item .nav-menu__item--link:focus{ outline:none; } .account-nav__container .nav-menu .nav-menu__item.active .nav-menu__item--link{ font-weight: 700; } .account-nav__container .nav-menu .nav-menu__item.active .nav-menu__item--link::after{ background:none !important; }
 <div class="account-nav" role="navigation"> <div class="account-nav__container"> <ul role="menubar" class="nav-menu"> <li role="menuitem" class="nav-menu__item"> <a class="nav-menu__item--link" href="/Customer/Account/EditAccount.html">Personal Information</a> </li> <li role="menuitem" class="nav-menu__item"> <a class="nav-menu__item--link" href="/Customer/Account/OrderSummary.html">You Orders</a> </li> <li role="menuitem" class="nav-menu__item"> <a class="nav-menu__item--link" href="/Customer/Account/ReturnSummary.html">Returns &amp; Exchanges</a> </li> <li role="menuitem" class="nav-menu__item active"> <a class="nav-menu__item--link" href="/Customer/Account/AccountSettings.html">Settings</a> </li> <li role="menuitem" class="nav-menu__item"> <a class="nav-menu__item--link" href="/Customer/Account/CommunicationPreferences.html">Preferences</a> </li> <li role="menuitem" class="nav-menu__item"> <a class="nav-menu__item--link" href="/Customer/Account/AddressBook.html">Addresses</a> </li> </ul> </div> </div>

You had it, you just needed a single line of CSS.你有它,你只需要一行 CSS。

From the MDN docs for offsetLeft:来自 offsetLeft 的MDN 文档

left is an integer representing the offset to the left in pixels from the closest relatively positioned parent element. left 是一个整数,表示从最近的相对定位的父元素向左的偏移量(以像素为单位)。

You didn't have a relatively positioned parent element.您没有相对定位的父元素。 In this case it should be your ul, see the snippet, all I added was the position: relative for the ul.nav-menu, works great.在这种情况下,它应该是您的 ul,请参阅代码段,我添加的只是位置:相对于 ul.nav-menu,效果很好。

 window.onload = function () { document.getElementsByClassName('nav-menu')[0].scrollLeft = 0; var menus = document.getElementsByClassName('nav-menu__item'); for (var i = 0; i < menus.length; i++) { if (menus[i].classList.contains('active')) { document.getElementsByClassName('nav-menu')[0].scrollLeft = menus[i].offsetLeft; } } }
 .account-nav{ padding:0; margin: 0 0 30px; } .account-nav__container{ margin:0; padding:0; border-bottom: 1px solid #757575; } .account-nav__container .nav-menu{ display:flex; list-style: none; overflow-x: auto; -webkit-overflow-scrolling: touch; -ms-overflow-style: -ms-autohiding-scrollbar; scrollbar-width: none; } .account-nav__container .nav-menu::-webkit-scrollbar { display: none; } .account-nav__container .nav-menu .nav-menu__item{ display:block; margin-right:20px; margin-bottom:-1px; white-space: nowrap; } ul.nav-menu { position: relative } .account-nav__container .nav-menu .nav-menu__item.active{ border-bottom: 2px solid black; } .account-nav__container .nav-menu .nav-menu__item .nav-menu__item--link{ display:block; padding:15px 0; text-decoration:none; text-align:left; } .account-nav__container .nav-menu .nav-menu__item .nav-menu__item--link:active, .account-nav__container .nav-menu .nav-menu__item .nav-menu__item--link:hover, .account-nav__container .nav-menu .nav-menu__item .nav-menu__item--link:focus{ outline:none; } .account-nav__container .nav-menu .nav-menu__item.active .nav-menu__item--link{ font-weight: 700; } .account-nav__container .nav-menu .nav-menu__item.active .nav-menu__item--link::after{ background:none !important; }
 <div class="account-nav" role="navigation"> <div class="account-nav__container"> <ul role="menubar" class="nav-menu"> <li role="menuitem" class="nav-menu__item"> <a class="nav-menu__item--link" href="/Customer/Account/EditAccount.html">Personal Information</a> </li> <li role="menuitem" class="nav-menu__item"> <a class="nav-menu__item--link" href="/Customer/Account/OrderSummary.html">You Orders</a> </li> <li role="menuitem" class="nav-menu__item"> <a class="nav-menu__item--link" href="/Customer/Account/ReturnSummary.html">Returns &amp; Exchanges</a> </li> <li role="menuitem" class="nav-menu__item active"> <a class="nav-menu__item--link" href="/Customer/Account/AccountSettings.html">Settings</a> </li> <li role="menuitem" class="nav-menu__item"> <a class="nav-menu__item--link" href="/Customer/Account/CommunicationPreferences.html">Preferences</a> </li> <li role="menuitem" class="nav-menu__item"> <a class="nav-menu__item--link" href="/Customer/Account/AddressBook.html">Addresses</a> </li> </ul> </div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM