【问题标题】:How do I create an infinite scrolling image gallery如何创建无限滚动图片库
【发布时间】:2021-04-30 16:02:28
【问题描述】:

我正在尝试找出一种方法,让同一行上的多个图像延伸超过 div 继续向左滚动,直到它看不见,此时它将移动到图像库的末尾并继续再次滚动,即使它在视图之外。

这是我到目前为止的代码。我在课堂上对图像进行游戏,因为我觉得这会有所帮助,但我还不确定如何。

html, body {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
  margin: 0px;
  padding: 0px;
  overflow: hidden;
}
*, *::before, *::after {
  box-sizing: border-box;
}
body {
background-color: black;
}
#permas {
  height: 150px;
  bottom: 0;
  background: blue;
  position: absolute;
  overflow:hidden;
  overflow-y: hidden;
  white-space:nowrap;
}
#permas img {
  height: 100%;
}
<html>
<head>
<title>Test site
</title>
<link rel="stylesheet" type="text/css" href="main.css">
</head>
<body>
<div id="permas">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
</div>
<script src="main.js"></script>
</body>
</html>

【问题讨论】:

  • 我觉得您需要为此使用一些替代基本滚动的方法。我的想法是,如果你有一个设置为overflow: scroll 的盒子,当里面的东西在里面移动时,它会非常紧张。相反,我认为您将不得不在每一侧使用一些滚动按钮以及哪个框居中的索引。如果一个框在视图之外足够远,请使用 JavaScript 将其移动到列表的末尾……再说一次,不是经过深思熟虑,只是我的直觉……
  • @TemaniAfif 我同意这看起来相关,并且我已经查看了该帖子中的信息,但是我试图让从右到左的连续流动运动一次显示多个图像。这似乎专注于让单个图像显示冻结几秒钟,然后再移动到下一个。
  • @CalvinBonner 我完全同意。从理论上讲,我有一个想法,我可以有一个设置 div,将视图之外的图像宽度提供给左侧,并使用一些 javascript 来实现,因此一旦它完全超出视图,它就可以将其附加到视图的末尾div 并再次为其设置动画以向左移动。

标签: javascript html css infinite


【解决方案1】:

由于图像可以有不同的纵横比,一次只将一张图像移动到队列的后面会很麻烦,并且需要 JavaScript 干预。

一个类似的方法是有两个图像的副本,动画永久 div 元素向左移动其宽度的 50%,即将所有 10 个图像移到左侧,并让由第二组开始填充的视口。

然后将 permas 恢复到最初的位置并重复。

cmets 表达了一些担忧,即需要做太多工作。我测试了 10 张不同大小和不同内容的图像以及问题中给出的图像,发现我的 Windows 10 相当强大的笔记本电脑上的 GPU 使用率非常一致,约为 20%。当然,如果有更多图像(如果一些图像的自然尺寸非常大,虽然我没有测试过),可能需要更多的处理器时间。

我没有看到任何抽搐。您必须确信这 10 张图像将超过视口宽度 - 但问题中也做出了这个假设。

这是带有原始图像的 sn-p:

html, body {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
  margin: 0px;
  padding: 0px;
  overflow: hidden;
  overflow: scroll;
}
*, *::before, *::after {
  box-sizing: border-box;
}
body {
background-color: black;
}
#permas {
  height: 150px;
  bottom: 0;
  background: blue;
  position: absolute;
  overflow:hidden;
  overflow-y: hidden;
  white-space:nowrap;
  
  /* added */
  left: 0;
  animation-name: scroll;
  animation-duration: 10s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
}
#permas img {
  height: 100%;
}
@keyframes scroll {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-50%);
  }
}
<div id="permas">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">

  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
  <img class="scroller" src="https://i.imgur.com/wURYltS.jpg">
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多