JSFiddle - React, Tailwind, and code Playground

HTML

<div id="mask">
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>10</li>
        <li>11</li>
        <li>12</li>
        <li>13</li>
        <li>14</li>
        <li>15</li>
        <li>16</li>
        <li>17</li>
        <li>18</li>
        <li>19</li>
        <li>20</li>
        <li>21</li>
        <li>22</li>
        <li>23</li>
        <li>24</li>
        <li>25</li>
        <li>26</li>
        <li>27</li>
        <li>28</li>
        <li>29</li>
        <li>30</li>
    </ul>
</div>
<input type="button" value="up" id="upButton" />
<input type="button" value="down" id="downButton" />

CSS

#mask        {height:100px; width:100px; border:1px solid; overflow:hidden; position:relative;}
ul           {position:absolute; top:0px; left:0px;}

JavaScript

var maskHeight = $('#mask').outerHeight();
var listHeight = $('#mask ul').outerHeight();
var roomToMove = maskHeight - listHeight;

var currentTopPos = $('#mask ul').position().top;

$('#upButton').click(function(){
    if(currentTopPos > roomToMove){
        var endPos = currentTopPos - maskHeight;
        if(endPos < roomToMove){
            endPos = roomToMove;
        }
        $('#mask ul').animate({
            top: endPos
        });
        currentTopPos = endPos;
    }
});

$('#downButton').click(function(){
    if(currentTopPos < 0){
        var endPos = currentTopPos + maskHeight;
        if(endPos > 0){
            endPos = 0;
        }
        $('#mask ul').animate({
            top: endPos
        });
        currentTopPos = endPos;
    }
});