我创建了一个使用 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>


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!