He tenido algo de tiempo y editado el código para hacer algo mas aceptable
Código HTML:
Ver original<!DOCTYPE html>
<html dir="ltr" lang="es-es"> <meta name="viewport" content="user-scalable=yes, width=device-width, initial-scale=1"> .contenedor {
width: 200px;
height: 169px;
border: 1px solid rgb(123, 109, 109);
background-color: rgb(238, 238, 238);
overflow: hidden;
}
.contenido {
position: relative;
}
.contenido ul {
list-style: none;
margin: 0;
padding: 0;
}
.contenido a {
background-color: rgb(238, 238, 238);
color: rgb(0, 0, 0);
display: block;
padding: 12px;
text-decoration: none;
}
.contenido a:hover {
background-color: rgb(204, 204, 204);
}
.contenido a.active {
background-color: rgb(76, 175, 80);
color: rgb(255, 255, 255);
}
.flechas {
float: right;
width: .9rem;
height: 100%;
position: relative;
color: rgb(91, 95, 94);
background-color: rgb(181, 176, 176);
cursor: default;
z-index: 1;
display: flex;
flex-direction: column;
flex-wrap: wrap;
}
.flechas div {
width: inherit;
height: auto;
background-color: rgb(181, 176, 176);
flex-grow: 1;
}
.flechas div div {
width: inherit;
height: 0;
background-color: rgb(99, 99, 99);
}
.up, .down {
width: inherit;
}
.up:after {
content: "\25B2";
}
.down:after {
content: "\25BC";
}
document.addEventListener('DOMContentLoaded', function() {
new combox({
contenedor : document.querySelector('.contenedor'),
velocidad : 100
});
});
function combox(params) {
this.contenedor = params.contenedor;
this.contenido = this.contenedor.lastElementChild;
this.contenedorH = this.contenedor.clientHeight;
this.contenidoH = this.contenido.offsetHeight;
if (this.contenedorH >= this.contenidoH) return false;
this.totalSlide = this.contenidoH - this.contenedorH;
this.objetivo = null;
this.carril = this.contenedor.firstElementChild.querySelectorAll('*')[1];
this.barra = this.carril.firstElementChild;
this.carrilH = this.carril.offsetHeight;
this.pos = 0;
this.vueltas = 1;
this.intervalo = null;
this.velocidad = this.contenedorH / params.velocidad;
this.posicion = 0;
this.avanza = 0;
var _this = this;
this.contenedor.firstElementChild.addEventListener('click', function(event) {
_this.objetivo = event.target,
_thiss = this;
if (_this.objetivo != this) {
clearInterval(_this.intervalo);
_this.intervalo = setInterval(function() {
_this.avanza = _this.velocidad * _this.vueltas;
if (_this.avanza <= _this.contenedorH) {
if (_this.objetivo == _thiss.firstElementChild) {
_this.posicion = _this.pos - _this.avanza;
} else {
_this.posicion = _this.pos + _this.avanza;
}
++_this.vueltas;
if (_this.posicion <= 0 || _this.posicion > _this.totalSlide) {
_this.posicion = (_this.posicion <= 0) ? 0 : _this.totalSlide;
_this.vueltas = 1;
_this.pos = _this.posicion;
clearInterval(_this.intervalo);
}
_this.contenido.style.top = -_this.posicion + 'px';
_this.barra.style.height = _this.carrilH * (((_this.posicion * 100) / _this.totalSlide) / 100) + 'px';
} else {
_this.vueltas = 1;
_this.pos = _this.posicion;
clearInterval(_this.intervalo);
}
}, 1);
}
});
}
<li><a href="#" class="active">PHP
</a></li> <li><a href="#">PYTHON
</a></li> <li><a href="#">JAVASCRIPT
</a></li> <li><a href="#">VISUAL BASIC
</a></li>