#jquery #position
#jquery #положение
Вопрос:
Я пытаюсь создать программу, в которой рядом с полюсом есть флаг. Он начинается в нижней части полюса, и когда пользователь нажимает на него, он перемещается к вершине полюса. Когда он находится вверху, если пользователь нажимает на него снова, он перемещается вниз. Итак, я пытаюсь создать этот эффект флага. Но прямо сейчас с тем, что у меня есть, работает первая часть, где она движется вверх. Но движущаяся вниз часть — нет. Кто-нибудь может помочь? Спасибо.
<!DOCTYPE html>
<html>
<head>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js">.
</script>
</head>
<body>
<img src = "https://upload.wikimedia.org/wikipedia/en/thumb/6/6c/Us_flag_large_38_stars.png/1200px-Us_flag_large_38_stars.png" id = "flag" width = "200px" height = "140px">
<div id = "pole"></div>
<script>
//booleans
var reachedTop = false;
var reachedBottom = true;
//initial positioning
$("#pole").width(10);
$("#pole").height($(document).height());
$("#pole").css("background-color", "gray");
$("#pole").css({left: $(document).width() * 5/12});
$("#pole").css("position", "absolute");
$("#flag").css("position", "absolute");
$("#flag").css({left: $("#pole").position().left, top: $(document).height()/3});
//animations on clicks
if (reachedBottom amp;amp; reachedTop == false){
$("#flag").click(function(){
$("#flag").animate({top: $("#pole").position().top});
if ($("#flag").position().top == $("#pole").position().top){
reachedTop = true;
reachedBottom = false;
}
});
} else if (reachedTop amp;amp; reachedBottom == false){
$("#flag").click(function(){
$("#flag").animate({top: $(document).height()/3});
if ($("#flag").position().top == $(document).height()/3){
reachedTop = false;
reachedBottom = true;
}
});
}
</script>
</body>
Ответ №1:
Я бы на самом деле использовал CSS и использовал JavaScript только для обновления классов, оставив CSS для управления анимацией.
$(function () {
$(".pole").click(function () {
$(this).toggleClass("top");
});
});
.pole {
height: 500px;
width: 5px;
background-color: #000;
position: relative;
}
.pole img {
position: absolute;
width: 150px;
left: 5px;
top: 100px;
transition: top 0.25s linear;
}
.pole.top img {
top: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="pole">
<img src="https://i.imgur.com/P87H5O6.png" alt="Flag" class="flag" />
</div>