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;
}
});