我用动态导入的图像制作了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>
单击“下一步”或“上一个”按钮时,是否可以将过渡添加到下一张图像?
答案 0 :(得分:2)
仅使用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>