【问题标题】:How to center click and drag scroll at the middle如何居中单击并在中间拖动滚动
【发布时间】:2025-12-18 06:05:02
【问题描述】:

我正在关注 Wes Bos 30 天 JavaScript 挑战和第 27 天:单击并拖动教程我想知道如何将滑块居中于中间位置而不是第一个(最左侧)位置?

const slider = document.querySelector('.items');
let isDown = false;
let startX;
let scrollLeft;
slider.addEventListener('mousedown', (e) => {
  isDown = true;
  slider.classList.add('active');
  startX = e.pageX - slider.offsetLeft;
  scrollLeft = slider.scrollLeft;
});
slider.addEventListener('mouseleave', () => {
  isDown = false;
  slider.classList.remove('active');
});
slider.addEventListener('mouseup', () => {
  isDown = false;
  slider.classList.remove('active');
});
slider.addEventListener('mousemove', (e) => {
  if (!isDown) return; // stop the fn from running
  e.preventDefault();
  const x = e.pageX - slider.offsetLeft;
  const walk = (x - startX) * 3;
  slider.scrollLeft = scrollLeft - walk;
});
<div class="items">
  <div class="item item1">01</div>
  <!-- Scroll starts here -->
  <div class="item item2">02</div>
  <div class="item item3">03</div>
  <div class="item item4">04</div>
  <div class="item item5">05</div>
  <div class="item item6">06</div>
  <!-- I want to start here-->
  <div class="item item7">07</div>
  <div class="item item8">08</div>
  <div class="item item9">09</div>
  <div class="item item10">10</div>
  <div class="item item11">11</div>
  <div class="item item12">12</div>
</div>

我发现按我想要的方式工作的代码是this SO ask 的答案,但是当我在 Wes Bos 的代码中实现它时,我根本无法再单击和拖动。

这是YouTube 上的视觉示例。

【问题讨论】:

    标签: javascript html css


    【解决方案1】:

    在脚本的开头(&lt;script&gt; 标签之后)执行类似的操作:

    const startingEl = document.querySelector(".item.item6");
    window.scrollTo(0, startingEl.offsetTop);
    

    【讨论】:

    • .scrollTo 对我不起作用,我找到了使用 .scrollIntoView 的解决方案。
    【解决方案2】:

    这对我有用

    const startingEl = document.querySelector(".item6").scrollIntoView();
    

    【讨论】: