Есть много способов как это сделать, но такое не делают обычно на чистом js, это пишут на css.
Можно в пункт меню добавить блок который вы хотите показывать, назовем его ".block" сделать ему допустим высоту 0, и при наведение делать ему его нормальную высоту через ховер - li:hover .block{height: 100px;}(так например). Чтобы было с анимацией добавим свойство .block transition: height 1s; и тем самым высота будет анимироваться. Держи код для примера))
ul{
display: flex;
}
li{
cursor: pointer;
}
li:hover .block{
height: 100px;
}
.block{
background: black;
width:100px;
height: 0px;
transition: height 1s;
}
</style>
<ul>
<li>
<p href="">шашлыки</>
<div class="block"> </div>
</li>
<li><p href="">шашлыки</></li>
</ul>
</body>