如果我正确理解你的问题,你根本不需要 Javascript,只用 CSS 就可以做到。
Here's a demo I made。让我知道这与您正在尝试做的事情有多接近。
<section class="container">
<h2>Carousel</h2>
<p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in lorem vel dui faucibus auctor. Proin sit amet tortor libero. In sed nulla metus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In urna risus, condimentum at nibh mollis, rutrum cursus quam. Sed rhoncus ac ante vitae mollis. Vestibulum maximus lorem non justo dictum ultrices. Etiam interdum, mi ut posuere iaculis, tellus quam placerat felis, sit amet vehicula est magna ut augue.</p>
</section>
<section class="carousel">
<div class="carousel-card"></div>
<div class="carousel-card"></div>
<div class="carousel-card"></div>
<div class="carousel-card"></div>
<div class="carousel-card"></div>
<div class="carousel-card"></div>
<div class="carousel-card"></div>
<div class="carousel-card"></div>
<div class="carousel-card"></div>
<div class="carousel-card"></div>
<div class="carousel-card"></div>
<div class="carousel-card"></div>
</section>
<section class="container">
<h2>Carousel</h2>
<p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in lorem vel dui faucibus auctor. Proin sit amet tortor libero. In sed nulla metus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In urna risus, condimentum at nibh mollis, rutrum cursus quam. Sed rhoncus ac ante vitae mollis. Vestibulum maximus lorem non justo dictum ultrices. Etiam interdum, mi ut posuere iaculis, tellus quam placerat felis, sit amet vehicula est magna ut augue.</p>
</section>
:root {
--max-width: 960px;
}
html,
body {
margin: 0;
padding: 0;
}
section {
margin-top: 30px;
margin-bottom: 30px;
}
.container {
max-width: var(--max-width);
margin-left: auto;
margin-right: auto;
}
.carousel {
display: flex;
overflow: auto;
}
.carousel:before,
.carousel:after {
content: '';
width: calc((100vw - var(--max-width)) / 2);
flex-shrink: 0;
}
.carousel-card {
height: 400px;
width: 300px;
background-color: gray;
border-radius: 20px;
flex-shrink: 0;
}
.carousel-card + .carousel-card {
margin-left: 20px;
}