Я пытаюсь создать горизонтальный экран на основе положения мыши.Я создал большую часть скрипта и CSS, однако он работает только тогда, когда я вручную вводю смещение для горизонтальной прокрутки.
Пример:
const navbar = document.getElementById('navbar-list');
document.addEventListener('mousemove', e => {
let x = e.clientX || e.pageX;
navbar.style.setProperty('--pos-x', (-x/1.35) + 'px');
});
html, body {
height: 100%;
margin: 0;
padding: 0;
}
.flex-container, .menu, ul, li, a {
height: 100%;
}
.flex-container, .menu {
width: 100%;
height: 100%;
}
.menu {
overflow: hidden;
position: relative;
}
.menu ul {
position: absolute;
left: var(--pos-x);
list-style: none;
margin: 0px;
padding: 0px;
white-space: nowrap;
width: 100%;
}
.menu ul > li {
padding: 0px;
margin: 0px;
margin-left: -4px;
text-align: center;
display: inline-block;
width: 25%;
}
.menu ul > li > a {
display: inline-block;
margin: 0px;
width: 100%;
text-decoration: none;
color: #000;
font-size: 18pt;
background: rgba(0, 0, 0, 0.0);
-webkit-transition: background-color 0.4s; /* Safari */
transition: background-color 0.4s;
}
.menu ul > li > a > .bottom-info {
position: absolute;
bottom: -30px;
text-align: center;
display: block;
width: 25%;
-webkit-transition: bottom 0.3s; /* Safari */
transition: bottom 0.3s;
}
.menu ul > li > a:hover .bottom-info {
bottom: 40px;
}
.menu ul > li > a:hover {
background: rgba(0, 0, 0, 0.6);
color: #FFF;
}
<!-- Menu -->
<div class="menu" id="menu">
<ul class="flex-container" id="navbar-list">
<li>
<a href="#">
<span class="title">First Item</span>
<div class="bottom-info">The first</div>
</a>
</li>
<li><a href="#">
<span class="title">Second Item</span>
<div class="bottom-info">The second</div>
</a></li>
<li><a href="#">
<span class="title">Third Item</span>
<div class="bottom-info">The Third</div>
</a></li>
<li><a href="#">
<span class="title">Fourth Item</span>
<div class="bottom-info">The fouth</div>
</a></li>
<li><a href="#">
<span class="title">Fifth Item</span>
<div class="bottom-info">The fifth</div>
</a></li>
<li><a href="#">
<span class="title">Sixth Item</span>
<div class="bottom-info">The sixth</div>
</a></li>
<li><a href="#">
<span class="title">Seventh Item</span>
<div class="bottom-info">The final item</div>
</a></li>
</ul>
</div>
Проблема в части Javascript.В настоящее время это работает только с 7 пунктами, и если я установлю --pos-x
var
равным -x/1.35
.Если количество элементов изменяется, сценарий либо не прокручивает весь путь до последнего элемента (если более 7 элементов), либо слишком далеко прокручивает последний элемент (менее 7 элементов).
const navbar = document.getElementById('navbar-list');
document.addEventListener('mousemove', e => {
let x = e.clientX || e.pageX;
// Here is where the problem lies (I should I calculate the 1.35 value?)
navbar.style.setProperty('--pos-x', (-x/1.35) + 'px');
console.log(navbar.offsetWidth);
});
Это может быть просто математическая проблема, я просто не могу понять это для моей жизни.