我创建了一个使用 Bootstrap 4、水平滚动(通过 jquery.mousewheel.js)和原生 CSS Snapping 的网站。我使用的是 Chrome 81,不关心旧的/不受支持的浏览器。
当我申请时scroll-snap-type: x mandatory;
对于 CSS,水平滚动停止工作(根本不发生滚动)。如果移除 CSS 属性,则滚动行为正常。这是我的 HTML 结构:
<div class="portfolio_content container-fluid h-100">
<div class="row h-100 flex-row flex-nowrap scrollx long_content">
<div class="col-12 h-100 project d-table" id="project1">
<div class="project_title d-table-cell align-middle">
<p>
Project 1
</p>
</div>
</div>
<div class="col-12 h-100 project d-table" id="project2">
<div class="project_title d-table-cell align-middle">
<p>
Project 2
</p>
</div>
</div>
<div class="col-12 h-100 project d-table" id="project3">
<div class="project_title d-table-cell align-middle">
<p>
Project 3
</p>
</div>
</div>
<div class="col-12 h-100 project d-table" id="project4">
<div class="project_title d-table-cell align-middle">
<p>
Project 4
</p>
</div>
</div>
</div>
</div>
对于 CSS,关键条目在这里:
html, body {
height: 100%;
}
.portfolio_content .scrollx {
overflow-x: scroll;
}
.portfolio_content .long_content {
scroll-snap-type: x mandatory; /* Comment this to make scrolling works */
}
.portfolio_content .project {
scroll-snap-align: start;
}
.portfolio_content .project_title {
display: block;
margin: auto;
text-align: center;
}
.portfolio_content .project_title h1 {
font-size: 96px;
line-height: 0.8;
}
最后,这里是 JSFiddle demo .如果您在 CSS 中注释第 9 行,演示将能够滚动。
我的目标是允许在滚动时捕捉“元素”DIV,即滚动后将完全显示一个“元素”DIV。
我应该如何更改代码?
最佳答案
当您可以使用简单的脚本来完成时,您不需要外部插件。
$(".portfolio_content .project").on('wheel', function(e) {
e.preventDefault();
if (e.originalEvent.wheelDelta >= 0) {
if ($(this).prev().length) {
var prev = "#" + $(this).prev().attr("id");
document.querySelector(prev).scrollIntoView({behavior: 'smooth'});
}
} else {
if ($(this).next().length) {
var next = "#" + $(this).next().attr("id");
document.querySelector(next).scrollIntoView({behavior: 'smooth'});
}
}
});
html, body {
height: 100%;
}
.portfolio_content .scrollx {
overflow-x: scroll;
}
.portfolio_content .project {
scroll-snap-align: start;
}
.portfolio_content .project_title {
display: block;
margin: auto;
text-align: center;
}
.portfolio_content .project_title h1 {
font-size: 96px;
line-height: 0.8;
}
#project1, #project3 {
background-color: #EEE;
}
#project2, #project4 {
background-color: #CCC;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<div class="portfolio_content container-fluid h-100">
<div class="row h-100 flex-row flex-nowrap scrollx long_content">
<div class="col-12 h-100 project d-table" id="project1">
<div class="project_title d-table-cell align-middle">
<p>
Project 1
</p>
</div>
</div>
<div class="col-12 h-100 project d-table" id="project2">
<div class="project_title d-table-cell align-middle">
<p>
Project 2
</p>
</div>
</div>
<div class="col-12 h-100 project d-table" id="project3">
<div class="project_title d-table-cell align-middle">
<p>
Project 3
</p>
</div>
</div>
<div class="col-12 h-100 project d-table" id="project4">
<div class="project_title d-table-cell align-middle">
<p>
Project 4
</p>
</div>
</div>
</div>
</div>
关于jquery - 具有水平滚动的 CSS 滚动捕捉类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61794477/