转载说明:原创不易,未经授权,谢绝任何形式的转载

最近我正在一个项目上工作,需要实现一个幻灯片/轮播。我在网上搜索了一下,但没有找到具有我需要的功能或者还要装一些插件,所以,我想自己创建一个,方便自己使用。

这是一个示例:

HTML

让我们为轮播创建基本的HTML结构。

  • 创建一个类为container的div。
  • 在此div中创建另一个类为carousel-view的div。一个用于幻灯片向左滚动的按钮。一个带有类item-list的幻灯片项目容器。一个用于幻灯片向右滚动的按钮。

CSS

现在,我们来到CSS部分。首先,我们需要做一些基础设置。

以下图像说明了CSS的基础结构。

现在让我们看看这个Item-list。

由于它是一个水平幻灯片,我们需要水平对齐项目,为此有多种方法,但我选择使用display:flex属性,因为它还可以让我在项目之间添加间距。

所以,基本上我们在这里有一个容器,其中具有可滚动溢出的项目列表,窗口中需要显示的项目数由幻灯片的宽度确定。

现在,让我们谈谈我们在这里使用的神奇咒语。

.item-list{ ... scroll-snap-type: x mandatory; } .item{ ... scroll-snap-align: center; }

此属性用于控制项目的滚动。我们想要实现的效果是确保一个图片元素要么完全在窗口左侧,要么完全在窗口左侧外。

要创建垂直滑块,您可以使用scroll-snap-type: y mandatory。您可以在此处了解有关scroll-snap属性的更多信息。

scroll-snap-type: x mandatory;:这个属性告诉浏览器,当用户滚动一个横向的容器时,需要对容器内的元素进行“捕捉”。 x表示只对横向滚动进行捕捉,mandatory表示在滚动结束时一定会进行捕捉,而不是只在用户松开鼠标/手指时才进行捕捉。

scroll-snap-align: center;:这个属性告诉浏览器,在进行捕捉时,需要将滚动位置捕捉到最接近的元素的中心位置。也可以使用其他值,如start(将滚动位置捕捉到最接近的元素的起始位置)和end(将滚动位置捕捉到最接近的元素的末尾位置)等。

这些属性可以极大地改善用户体验,特别是在移动设备上。例如,在一个横向的轮播图或相册中,用户可以通过滚动来查看更多的内容。如果不使用滚动捕捉,用户可能很难找到最接近的元素,而且可能无法对其进行浏览。通过使用这些属性,浏览器可以自动将滚动位置捕捉到最接近的元素,使用户体验更加流畅和自然。

提示:要隐藏滚动条但保留功能,我们可以这样做

/* 隐藏Chrome、Safari和Opera的滚动条 */ .item-list::-webkit-scrollbar { display: none; } /* 隐藏IE、Edge和Firefox的滚动条 */ .item-list { -ms-overflow-style: none; /* IE和Edge */ scrollbar-width: none; /* Firefox */ }

以下是完整的CSS代码

button{ border: none; cursor: pointer; color: white; background: none; transition: all .3s ease-in-out; } .container { width: 100%; height: 100vh; display: flex; justify-content: center; align-items: center; background-color: white; } .carousel-view { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 44px 0; transition: all 0.25s ease-in; } .carousel-view .item-list { max-width: 950px; width: 70vw; padding: 50px 10px; display: flex; gap: 48px; scroll-behavior: smooth; transition: all 0.25s ease-in; -ms-overflow-style: none; /* IE and Edge */ scrollbar-width: none; /* Firefox */ overflow: auto; scroll-snap-type: x mandatory; } /* Hide scrollbar for Chrome, Safari and Opera */ .item-list::-webkit-scrollbar { display: none; } .prev-btn { background = none; cursor: pointer; } .next-btn { cursor: pointer; } .item { scroll-snap-align: center; min-width: 120px; height: 120px; background-color: deeppink; border-radius:8px; }

JavaScript

现在是时候实现按钮的功能了:

  • 使用document.getElementById()函数从文档中获取nextButton、prevButton和itemList对象。
  • 现在实现单击时的项目滚动,使用eventListener。

const prev = document.getElementById('prev-btn') const next = document.getElementById('next-btn') const list = document.getElementById('item-list') const itemWidth = 150 const padding = 10 prev.addEventListener('click',()=>{ list.scrollLeft -= (itemWidth + padding) }) next.addEventListener('click',()=>{ list.scrollLeft += (itemWidth + padding) })

  • 每当用户与按钮交互时,它的addEventListener将被触发,并且传递事件类型click确保回调函数仅在单击时执行。
  • 现在,在回调函数中,我们正在减小和增加scrollLeft属性的值,以向右和向左滑动itemList。

以下是幻灯片的完整代码和演示:

https://codepen.io/mohitsharma0101/pen/WNJJzwM

结束

到这里,本案例就介绍到这里,建议大家还是亲自实践下,才能印象深刻。感谢你的阅读。

文章创作不易,如果你喜欢我的分享,别忘了点赞转发,让更多有需要的人看到,最后别忘记关注「前端达人」,你的支持将是我分享最大的动力,后续我会持续输出更多内容,敬请期待。

原文:https://medium.com/@algopoint.ltd/how-to-create-a-slideshow-carousel-using-html-css-js-7ab0561b39b3

作者:AlgoPoint

非直接翻译,有自行改编和添加部分,翻译水平有限,难免有疏漏,欢迎指正