Анимации Javascript, перемещающие элемент DOM вверх (чистый js) - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть два прямоугольника один синий, один зеленый (зеленый скрыт переполнением).Я пытаюсь заставить зеленый прямоугольник двигаться вверх, пока он не достигнет вершины синего прямоугольника при нажатии кнопки.Я совершенно новичок в Javascript и не знаю, где я иду не так.Мыслительный процесс, лежащий в основе JavaScript, заключается в том, что я беру элемент и говорю, что если его позиция получает верх контейнера, затем останавливаю функцию, в противном случае увеличиваю его снизу, чтобы он двигался вверх.

Мой код выглядит следующим образом:

CSS


body {
    margin: 0;
    padding: 0;
    text-align: center;
}
#container{
    position: relative;
    background-color: brown;
    height: 800px;
    width: 800px;
    margin: 0 auto;
    margin-top: 75px; 
}
#fullLoad{
    position: relative;
    height: 600px;
    width: 200px;
    background: blue;
    left: 300px;
    top: 100px;
    overflow: hidden;
    border-radius: 20px 20px 20px 20px;
}
#loader{
    border-radius: 20px 20px 20px 20px;
    z-index: 2;
    position: absolute;
    height: 600px;
    width: 200px;
    background: green;
    top: 600px;


}
#btn{
    position: absolute;
    top: 20px;
    right: 362px;
    padding: 5px 20px;
    border-radius: 10px;
    background: gold;
    font-family: sans-serif;
    font-size: 1.8em;
    color: #424242;

}

    HTML


<div id="container">

    <div id="fullLoad">

        <div id="loader"></div>

    </div>

    <input id="btn" type="button" value="Go !" onclick="load()">

</div>







    Javascript

function load() {
    var loader = document.getElementById("loader"); 
    var pos = 600;
    var id = setInterval(frame, 5);
    function frame() {
        if (pos == 0) {
            clearInterval(id);
        } else {
            pos++; 
            loader.style.bottom = pos + 'px'; 

        }
    }
}

1 Ответ

0 голосов
/ 15 сентября 2018

Вам просто нужно изменить

pos++;
loader.style.bottom = pos + 'px';

до

pos--; 
loader.style.top = pos + 'px';

Потому что вы начинаете с 600px сверху и хотите достичь 0.

Доказательство:

function load() {
    var loader = document.getElementById("loader"); 
    var pos = 600;
    var id = setInterval(frame, 5);
    function frame() {
        if (pos == 0) {
            clearInterval(id);
        } else {
            pos--; 
            loader.style.top = pos + 'px'; 

        }
    }
}
body {
    margin: 0;
    padding: 0;
    text-align: center;
}
#container{
    position: relative;
    background-color: brown;
    height: 800px;
    width: 800px;
    margin: 0 auto;
    margin-top: 75px; 
}
#fullLoad{
    position: relative;
    height: 600px;
    width: 200px;
    background: blue;
    left: 300px;
    top: 100px;
    overflow: hidden;
    border-radius: 20px 20px 20px 20px;
}
#loader{
    border-radius: 20px 20px 20px 20px;
    z-index: 2;
    position: absolute;
    height: 600px;
    width: 200px;
    background: green;
    top: 600px;
}
#btn{
    position: absolute;
    top: 20px;
    right: 362px;
    padding: 5px 20px;
    border-radius: 10px;
    background: gold;
    font-family: sans-serif;
    font-size: 1.8em;
    color: #424242;

}
<div id="container">

    <div id="fullLoad">

        <div id="loader"></div>

    </div>

    <input id="btn" type="button" value="Go !" onclick="load()">

</div>
...