CSS幻灯片过渡

问题描述 投票:3回答:1

我用动态导入的图像制作了CSS幻灯片,但是现在添加过渡时遇到了麻烦。单击下一个或上一个按钮时,我希望图像滑动,但找不到解决此问题的方法。这是我当前代码的片段:

$("#Next").click(function(){
	$("#Slider").append($("#Slider img:first-of-type"));
});

$("#Prev").click(function(){
	$("#Slider").prepend($("#Slider img:last-of-type"));
});
html{
	align-items: center;
	background-color: #31353D;
	display: flex;
	justify-content: center;
}

#Wrapper {
  margin-top: 20px;
}

#Slideshow{
	align-items: center;
	display: flex;
	flex-direction: column;
	justify-content: center;
	overflow: hidden;
	position: relative;
}

#Slider{
	border: 5px solid #1C1D21;
	height: 568px;
	overflow: hidden;
	width: 1024px;
}

#Slider img{
	height: 568px;
	width: 1024px;
	transition: all 1s;
}

#Arrows{
	display: flex;
	justify-content: space-between;
	height: 30px;
	position: absolute;
	width: 1024px;
}

#Arrows i{
	background-color: rgba(255, 255, 255, .25);
	color: #1C1D21;
	cursor: pointer;
	height: 30px;
	padding: 15px;

	transition: background-color .5s, color .5s;
}

#Arrows i:first-of-type{
	padding-right: 20px;
}

#Arrows i:last-of-type{
	padding-left: 20px;
}

#Arrows i:hover{
	background-color: rgba(28,29,33, .75);
	color: #EEEFF7;
}
<html lang="en" dir="ltr">
  <head>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css" integrity="sha256-h20CPZ0QyXlBuAw7A+KluUYx/3pK+c7lYEpqLTlxjYQ=" crossorigin="anonymous" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <link rel="stylesheet" href="css/slideshow.css">
    <script src="js/display.js"></script>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <section id="Wrapper">
    	<div id="Slideshow">
    		<div id="Slider">
          <img src="http://via.placeholder.com/1024x568.jpg?text=1">
          <img src="http://via.placeholder.com/1024x568.jpg?text=2">
          <img src="http://via.placeholder.com/1024x568.jpg?text=3">
          <img src="http://via.placeholder.com/1024x568.jpg?text=4">
          <img src="http://via.placeholder.com/1024x568.jpg?text=5">
    		</div>
    		<div id="Arrows">
    			<i id="Prev" class="fa fa-chevron-left fa-2x" aria-hidden="true"></i>
    			<i id="Next" class="fa fa-chevron-right fa-2x" aria-hidden="true"></i>
    		</div>
    	</div>
      <script src="js/slideshow.js"></script>
    </section>

  </body>
</html>

单击下一个或上一个按钮时,是否有任何方法可以向下一个图像添加过渡?

javascript html css
1个回答
0
投票

仅使用CSS来实现您想要的是不够的。我看到您也使用JS来实现滑动动画,所以我给自己选择了也使用JS来解决问题的方法。想法是使用transform: translate(...)transition结合执行平移动画。我们将对幻灯片内的图像进行翻译。

这里是一个示例,显示了如何完成。我选择使用香草JS而不是jQuery,因为您似乎不需要jQuery。

尽管不相关,但我已修复了您的HTML,使其嵌套更少,并且还移动了箭头div,以便使用CSS进行调整更容易。

const next = document.querySelector('#Next')
const prev = document.querySelector('#Prev')
const slider = document.querySelector('#Slider')

let images = slider.querySelectorAll('img')
let currentImageIndex = 0
let maxImageIndex = images.length - 1

next.addEventListener('click', e => {
  updateCurrentImageIndex(1)
  slideImage()
})

prev.addEventListener('click', e => {
  updateCurrentImageIndex(-1)
  slideImage()
})

function updateCurrentImageIndex(value) {
  currentImageIndex += value
  if (currentImageIndex < 0) currentImageIndex = maxImageIndex
  else if (currentImageIndex > maxImageIndex) currentImageIndex = 0
}

function slideImage() {
  images.forEach(image => {
    image.style.transform = `translateX(${-100 * currentImageIndex}%)`
  })
}
* {
  box-sizing: border-box;
}

html {
  align-items: center;
  background-color: #31353D;
  display: flex;
  justify-content: center;
}

html,
body {
  height: 100%;
  width: 100%;
  margin: 0;
}

#Slider {
  position: relative;
  display: flex;
  width: 100%;
  height: 100%;
  border: 5px solid #1C1D21;
  overflow: hidden;  
}

#Slider img {
  max-height: 100%;
  max-width: 100%;  
  flex: 0 0 100%;
  transition: all 1s;
}

#Arrows {
  display: flex;
  justify-content: space-between;
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
}

#Arrows i {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background-color: rgba(255, 255, 255, .25);
  color: #1C1D21;
  cursor: pointer;
  height: 60px;
  padding: 15px;
  transition: background-color .5s, color .5s;
}

#Arrows i:last-of-type {
  left: 100%;
  transform: translate(-100%, -50%);
}

#Arrows i:hover {
  background-color: rgba(28, 29, 33, .75);
  color: #EEEFF7;
}
<html lang="en" dir="ltr">

<head>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css" integrity="sha256-h20CPZ0QyXlBuAw7A+KluUYx/3pK+c7lYEpqLTlxjYQ=" crossorigin="anonymous" />
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <link rel="stylesheet" href="css/slideshow.css">
  <script src="js/display.js"></script>
  <meta charset="utf-8">
  <title></title>
</head>

<body>
    <div id="Slider">
      <img src="http://via.placeholder.com/1024x568.jpg?text=1">
      <img src="http://via.placeholder.com/1024x568.jpg?text=2">
      <img src="http://via.placeholder.com/1024x568.jpg?text=3">
      <img src="http://via.placeholder.com/1024x568.jpg?text=4">
      <img src="http://via.placeholder.com/1024x568.jpg?text=5">
      <div id="Arrows">
        <i id="Prev" class="fa fa-chevron-left fa-2x" aria-hidden="true"></i>
        <i id="Next" class="fa fa-chevron-right fa-2x" aria-hidden="true"></i>
      </div>
    </div>
    <script src="js/slideshow.js"></script>

</body>

</html>
© www.soinside.com 2019 - 2024. All rights reserved.