#html #jquery #css #css-animations
Вопрос:
У меня есть кнопка, которая, когда я нажимаю на нее, создает анимацию для перемещения изображения вверх.
Каждый раз, когда я нажимаю на кнопку, она должна добавлять другое изображение, которое перемещается вверх.
Проблема в следующем: если я нажал на кнопку более одного раза, первое изображение завершается, но все остальные изображения просто исчезают, не достигнув точки.
CSS
.zoom{
position: fixed;
top: 50%;
right: 1%;
width: 5%;
height: 5%;
opacity: 0;
animation: zoom 2s ease forwards;
z-index: 2;
}
@keyframes zoom{
0%{opacity: 0}
50%{opacity: 1}
100%{opacity: 0; top: 1%;}
}
HTML
<head>
<script src="https://code.jquery.com/jquery-1.12.3.min.js" integrity="sha256-aaODHAgvwQW1bFOGXMeX pC4PZIPsvn2h1sArYOhgXQ=" crossorigin="anonymous"></script>
</head>
<body>
<div class="col-lg-4 item-info">
<div class="card" style="background-color: #05008F">
<img class="thumbnail" src="image.png" width="640" height="360">
</div>
<div class="box-element">
<button>Image Up</button>
</div>
</div>
<script type="text/javascript">
$("button").on("click", function() {
$(this).closest(".item-info")
.find("img")
.clone()
.addClass("zoom")
.appendTo("body");
setTimeout(function(){
$(".zoom").remove();
}, 2000);
});
</script>
</body>
Анимация взята из этого урока
при нажатии на кнопку более 1 раза должно появиться более 1 изображения.
Проблема в том, что:
Когда я нажимаю много раз в течение 2 секунд, изображения отображаются, но когда с первого щелчка проходит 2 секунды, все изображения исчезают.
Ответ №1:
Проблема в том, что по истечении времени ожидания все изображения .zoom удаляются.
Этот фрагмент «запоминает», какой img должен удаляться при каждом таймауте.
В практической ситуации важно, чтобы эти изображения удалялись, когда в них больше нет необходимости, иначе в конечном итоге у вас может закончиться хранилище.
<head>
<script src="https://code.jquery.com/jquery-1.12.3.min.js" integrity="sha256-aaODHAgvwQW1bFOGXMeX pC4PZIPsvn2h1sArYOhgXQ=" crossorigin="anonymous"></script>
<style>
.zoom {
position: fixed;
top: 50%;
right: 1%;
width: 5%;
height: 5%;
opacity: 0;
animation: zoom 2s ease forwards;
z-index: 2;
}
@keyframes zoom {
0% {
opacity: 0
}
50% {
opacity: 1
}
100% {
opacity: 0;
top: 1%;
}
}
</style>
</head>
<body>
<div class="col-lg-4 item-info">
<div class="card" style="background-color: #05008F">
<img class="thumbnail" src="https://picsum.photos/id/1084/640/360?grayscale" width="640" height="360">
</div>
<div class="box-element">
<button>Image Up</button>
</div>
</div>
<script type="text/javascript">
$("button").on("click", function() {
const thisImg = $(this).closest(".item-info")
.find("img")
.clone();
thisImg.addClass("zoom")
.appendTo("body");
setTimeout(function() {
thisImg.remove();
}, 2000);
});
</script>
</body>
Ответ №2:
$("button").on("click", function() {
$(this).closest(".item-info")
.find("img")
.clone()
.addClass("zoom")
.appendTo("body");
if(!$('.zoom').get(0) )
setTimeout(function(){
$(".zoom").remove();
}, 2000);
});
Попробуйте сделать это таким образом и скажите, все ли в порядке 🙂
Комментарии:
1. Все еще не работает, я нажимаю на него, затем нажимаю еще раз, второй не отображается.
2. Я хочу иметь возможность показывать более 1 одновременно.
3. проверьте это еще раз после редактирования
4. Проблема в том, что если вы сделаете непрозрачность 1 на 100%, вы увидите, что она останется там. Но в любом случае это хорошо, теперь они не исчезают одновременно.
5. Это решение может работать визуально, но вам нужно удалить изображение, как только оно больше не понадобится, как это было в оригинале (хотя оно удалило слишком много сразу).