Ver Mensaje Individual
  #43 (permalink)  
Antiguo 02/12/2014, 05:12
Avatar de IsaBelM
IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 6 meses
Puntos: 1012
Respuesta: [APORTE] efectos sin jquery

Emulando Input Type Range --> compatibilidad: todos los navegadores modernos. no incluido ie8

Código:
<!DOCTYPE html>
<html dir="ltr" lang="es-es">
<head>
<title></title>
<meta charset="utf-8" />
<style type="text/css">

* {
    margin: 0;
    border: none;
    position: relative;
}



body {
    width: 100%;
    height: 100%;
    font-size: 100%;
}



div.contenedorRango {
    width: 40%; /* el ancho del range con respecto a su elemento padre */
    margin: 2.75em auto;
    padding: 0 2em;
    background-color: rgb(224, 224, 224);
    border: .1em solid rgb(221, 20, 20);
}



div.contenedorRango > div.valorRango {
    width: 0;
    height: 1.55em;
    left: 0;
}



div.contenedorRango > div.valorRango > span.minimo {
    float: left;
    left: 0;
    font: bold .9em Verdana;
    color: rgb(68, 68, 62);
}



div.contenedorRango > div.valorRango > span.maximo {
    float: right;
    right: 0;
    font: bold .9em Verdana;
    color: rgb(68, 68, 62);
}



div.contenedorRango > div.rango {
    width: 100%;
    height: auto;
    margin-bottom: 1em;
}



div.contenedorRango > div.rango > div.bocadillo {
    width: 2.7em;
    height: auto;
    left: 1.5em; /*19px;*/
    top: 0; 
    margin-bottom: .5em;
    background-color: rgb(191, 191, 199);
    font: bold 80% Verdana;
    color: rgb(68, 68, 62);
    border-radius: .2em;
    border: 0.1em solid rgb(158, 158, 158);
    text-align: center;
    z-index: 2;
}



div.contenedorRango > div.rango > div.bocadillo:after {
    width: 0;
    height: 0;
    position: absolute;
    bottom: -9px;
    left: 50%;
    display: block;
    content: "";
    margin-left: -3px;
    overflow: hidden;
    border: 4px solid rgba(0, 0, 0, 0);
    border-top-color: rgb(158, 158, 158);
}



div.contenedorRango > div.rango > div.scrollbar {
    width: 100%;
    height: .75em;
}



div.contenedorRango > div.rango > div.scrollbar > div.carril {
    width: 100%;
    height: .6em;
    top: 10%;
    background-color: rgb(80, 69, 71);
    border-radius: 1em;
}



div.contenedorRango > div.rango > div.scrollbar > div.carril > input.inputTextValue {
    display: none;
}



div.contenedorRango > div.rango > div.scrollbar > div.carril > div.barra {
    width: 2.45em;
    height: 100%;
    position: absolute;
    left: 0;
    top: 0;
    background-color: rgb(191, 191, 199);
    border-radius: 3em;
    z-index: 2;
}



div.contenedorRango > div.rango > div.scrollbar > div.carril > div.barra:hover {
    cursor: move;
}



div.contenedorRango > div.rango > div.scrollbar > div.carril > div.progreso {
    width: 0;
    height: 100%; 
    background-color: rgb(47, 184, 28);
    border-radius: 1em;
}



div.contenedorRango > div.rango > ul.regla {
    width: 0;
    list-style-type: none;
    top: -19px;
    padding-left: 0;
    overflow: hidden;
    color: rgb(224, 224, 224);
}


div.contenedorRango > div.rango > ul.regla > li.num {
    width: 0;
    height: .25em;
    float: left;
    left: 0;
    top: 0;
    text-align: right;
    border-left: 1px solid rgb(15, 15, 15);
    border-right: 1px solid rgb(15, 15, 15);
}
</style>
<script type="text/javascript">
lib = {

    Evento : function(elemento, nomevento, fnc) {

        elemento.addEventListener(nomevento, fnc, false);
    },



    EventoEliminar : function(elemento, nomevento, fnc) {

        elemento.removeEventListener(nomevento, fnc, false);
    },



    cssComputado : function(obj, styleProp) {

        if (obj == null) { return 0; }

        var valor = window.getComputedStyle(obj, null)[styleProp];

        return valor;
    },



    EventoCancelar : function(evt) {

        evt.preventDefault();
    },



    EventoParar : function(evt) { 

        evt.stopPropagation();
    }

}



var Range = {

    reglaVisible : true, // boleano --> true / false
    min : [],
    max : [],
    step : [],
    inicia : [],
    barW : 0,
    trackW : 0,
    posInicialBocadillo : 0,
    nuevoMin : [],
    valorBocata : [],
    valorProgreso : 0,
    desplazamiento : 0,
    desplazamientoBoca : 0,
    barraLeft : 0,
    barraProgreso : null,
    bocata : null,
    dividirCarril : [],
    anchoCarril : [],
    offset1 : {}, 
    offset2 : {},
    ofset : 0,
    fooDrag : function() {},


    initRange : function() {

        Range.barW = parseInt(lib.cssComputado(document.querySelector('.barra'), 'width'));
        Range.trackW = parseInt(lib.cssComputado(document.querySelector('.carril'), 'width')),
        Range.posInicialBocadillo = parseInt(lib.cssComputado(document.querySelector('.bocadillo'), 'left'));

        Array.prototype.forEach.call(document.querySelectorAll('.contenedorRango'), function(rango, i) {

            Range.min.push(parseInt(rango.querySelector('.inputTextValue').getAttribute('data-min'), 10));
            Range.max.push(parseInt(rango.querySelector('.inputTextValue').getAttribute('data-max'), 10));
            Range.step.push(parseInt(rango.querySelector('.inputTextValue').getAttribute('data-step'), 10));
            Range.inicia.push(parseInt(rango.querySelector('.inputTextValue').getAttribute('data-inicia'), 10));

            Range.nuevoMin.push((Range.min[i] == 0) ? 1 : Range.min[i]);
            var dividirCar = parseInt((Range.trackW - Range.barW) / (Range.max[i] - Range.nuevoMin[i]), 10);
            var anchoCar = (dividirCar * (Range.max[i] - Range.nuevoMin[i]));

            Range.dividirCarril.push(parseInt(anchoCar / (Range.max[i] - Range.nuevoMin[i]), 10));

            Range.valorBocata.push(Range.inicia[i]-1);
            Range.anchoCarril.push(anchoCar);
            rango.querySelector('.minimo').textContent = Range.min[i];
            rango.querySelector('.maximo').textContent = Range.max[i];


            if (Range.reglaVisible) { 

                var ULregla = document.createElement('UL');
                ULregla.setAttribute('class', 'regla');
                rango.querySelector('.rango').appendChild(ULregla);

                for (var x = Range.step[i], regla = (Range.max[i] - Range.nuevoMin[i]), n = 0; x <= regla; x+=Range.step[i]) {

                    LIregla = document.createElement('LI');
                    LIregla.setAttribute('class', 'num');
                    ULregla.appendChild(LIregla);
                    rango.querySelectorAll('.num')[n++].style.width = ((Range.dividirCarril[i] * Range.step[i]) - 2) + 'px';
                }

                rango.querySelector('.regla').style.width = Range.anchoCarril[i] + 'px';
                rango.querySelector('.regla').style.paddingLeft = Range.barW + 'px';
            }


            rango.querySelector('.carril').style.width = (Range.anchoCarril[i] + Range.barW) + 'px';
            rango.querySelector('.valorRango').style.width = (Range.anchoCarril[i] + 10) + 'px';
            rango.querySelector('.valorRango').style.left = (Range.barW - 10) + 'px';
            rango.querySelector('.barra').style.left = (Range.inicia[i] <= 1) ? Range.inicia[i] + 'px' : (Range.dividirCarril[i] * (Range.valorBocata[i] * Range.step[i])) + 'px';
            rango.querySelector('.bocadillo').style.left = (Range.inicia[i] <= 1) ? (Range.inicia[i] + Range.posInicialBocadillo) + 'px' : ((Range.dividirCarril[i] * (Range.valorBocata[i] * Range.step[i])) + Range.posInicialBocadillo) + 'px';
            rango.querySelector('.bocadillo').textContent = (Range.inicia[i] <= 1) ? Range.nuevoMin[i] : (((Range.inicia[i] * Range.step[i]) + Range.nuevoMin[i]) - Range.step[i]);
            rango.querySelector('.progreso').style.width = (Range.inicia[i] <= 1) ? Range.inicia[i] + 'px' : ((Range.dividirCarril[i] * (Range.valorBocata[i] * Range.step[i])) + (Range.posInicialBocadillo / 2)) + 'px';
            
            Range.valorBocata[i] = rango.querySelector('.bocadillo').textContent;

            rango.querySelector('.inputTextValue').value = Range.valorBocata[i];

            lib.Evento(rango.querySelector('.barra'), 'mousedown', function(event) {Range.scrollRango(event, this, rango, i)});

        });

    },
continua en el siguiente post
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}