我正在尝试实现一个书籍视图,其中一次可以看到一页,用户可以滑动浏览每一页进行导航。所有页面的大小都相同,我必须以 100% 的视口宽度显示每个页面。我的问题是,当我在一个没有 X 的页面上并且我尝试调整浏览器窗口的大小时,我最终会进入其他页面编号。我希望它只保留在页面没有 X。当我在第一页或最后一页时,这不会发生。我为此创建了一个小提琴。https://jsfiddle.net/8y5swhj9/。
<!DOCTYPE html>
<html>
<head>
<title>POC</title>
<style type="text/css">
.container {
-webkit-box-sizing: border-box;
box-sizing: border-box;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-item-align: start;
outline: none;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: none;
overflow-x: scroll;
overflow-y: hidden;
overflow-y: -moz-hidden-unscrollable;
-ms-scroll-chaining: none;
-ms-scroll-snap-coordinate: 100vw 0;
scroll-snap-coordinate: 100vw 0;
-ms-scroll-snap-destination: 100vw 0;
scroll-snap-destination: 100vw 0;
-ms-scroll-snap-points-x: snapInterval(0%, 100%);
-ms-scroll-snap-points-x: repeat(100vw);
scroll-snap-points-x: repeat(100vw);
-ms-scroll-snap-type: mandatory;
-ms-scroll-snap-type: x mandatory;
scroll-snap-type: x mandatory;
scroll-snap-type: mandatory;
scrollbar-width: none;
width: 100%;
}
.page {
align-items: center;
display: flex;
height: 100%;
justify-content: center;
min-width: 100%;
position: relative;
scroll-snap-align: start;
width: 100%;
box-shadow: inset 0 0 20px #000000;
}
</style>
</head>
<body>
<div class="container" style="height: 359px;">
<div class="page">
<h1>1</h1>
</div>
<div class="page">
<h1>2</h1>
</div>
<div class="page">
<h1>3</h1>
</div>
<div class="page">
<h1>4</h1>
</div>
<div class="page">
<h1>5</h1>
</div>
<div class="page">
<h1>6</h1>
</div>
<div class="page">
<h1>7</h1>
</div>
<div class="page">
<h1>8</h1>
</div>
<div class="page">
<h1>9</h1>
</div>
<div class="page">
<h1>10</h1>
</div>
</div>
</body>
</html>
在此代码中,如果您移动到中心位置,例如第 6 页,然后横向调整浏览器窗口的大小,您将看到整个内容开始流动,我们最终会出现一些随机页号。
我从 https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_menu_hor_scroll 中汲取灵感。 这有一个水平滚动的菜单。我为此创建了一个小提琴:https://jsfiddle.net/xyzasmb2/此问题不会在这里发生。
我无法理解和解决此问题。有人可以帮忙吗?
问题是内容会随着容器而缩放,因为它是容器宽度的倍数......而 scrollLeft 位置保持不变,以左边缘的像素为单位。 我目前能想到的唯一解决此问题的方法是检测容器的大小调整,但您只能绑定到窗口的大小调整,而不能绑定到单个元素的大小调整事件......除了使用一些诡计:如何检测DIV的维度变化?
我希望有一种方法可以将 scrollLeft 位置指定为总宽度的百分比,因为这可以解决这个问题。
就像Pete说的,问题在于ScrollLeft的位置。您可以尝试在window.onresize上执行加法的函数。
window.onload = reorder;
function reorder(){
element.scrollLeft +=1}
因为它是强制性的滚动,如果你调整它的大小,它会重新排序。每次调整大小时,都会添加 1,然后在循环中对强制 x 进行排序。因此,它总是调整大小,它将保持居中。