【问题标题】:Change scroll axis on mobile devices (touch)更改移动设备上的滚动轴(触摸)
【发布时间】:2020-05-31 07:31:14
【问题描述】:

我有一个可以水平滚动的容器。这是通过将容器旋转 90 度来完成的。 然而,这只是一种视觉解决方法:visual 水平滚动是由 physical 垂直滚动完成的。在移动设备上,这是非常违反直觉的。

是否有任何方法可以控制滚动行为,以便可以通过水平触摸手势滚动容器?

这里是容器的简化演示:

.item {
  background: black;
  height: 50px;
  width: 50px;
  margin: 5px;
}

.container {
  background: yellow;
  width: fit-content;
  height: 300px;
  overflow-y: scroll;
  transform: rotate(-90deg);
  transform-origin: top right;
}
<div class="container">

  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>

</div>

【问题讨论】:

  • 也许将转换拉到另一个部分并将其包装在媒体查询中?然后只有大于设定宽度的设备才会横向滚动。
  • 忘了说我有多个这样的容器,所以从 UI 的角度来看,水平滚动会更好。

标签: javascript jquery css scroll touch


【解决方案1】:

实际上不是使用变换,而是将元素并排放置在弹性容器中。

因为您不希望元素随着容器大小而缩小,所以您可以在项目上设置最小宽度:

.item {
  background: black;
  height: 50px;
  width: 50px;
  margin: 5px;
  min-width:50px;
}

.container {
  display:flex;
  background: yellow;
  width: 300px;
  overflow-x: scroll;
}
<div class="container">

  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>

</div>

【讨论】:

  • 这解决了手机上的滚动问题,但在桌面上,这不能用鼠标滚轮滚动。考虑将您的解决方案用于移动设备,将我的解决方案用于桌面设备,尽管这肯定不是最佳做法。
猜你喜欢
  • 1970-01-01
  • 2018-01-28
  • 2014-01-04
  • 1970-01-01
  • 2014-04-28
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多