4种input元素滑块UI样式

分享4种input元素滑块UI样式是一款使用CSS3来渲染样式,使用JavaScript来处理滑块的鼠标拖动事件。效果图如下:

4种input元素滑块UI样式_第1张图片

在线预览    源码下载

实现的代码。

js代码:

var range_els = document.querySelectorAll('input[type=range]'), n = range_els.length, style_el = document.createElement('style'), styles = [], track_sel = [
        '::-moz-range-track',
        '::-webkit-slider-runnable-track',
        ' /deep/ #track'
    ], thumb_sel = [
        '::-webkit-slider-thumb',
        ' /deep/ #thumb'
    ], a = ':after', b = ':before', s = [
        '',
        '%',
        '%'
    ];
document.body.appendChild(style_el);
for (var i = 0; i < n; i++) {
    if (window.CP.shouldStopExecution(1)) {
        break;
    }
    styles.push('');
    range_els[i].addEventListener('input', function () {
        var idx = this.id.split('r')[1] - 1, base_sel = '.js #' + this.id, str = '', min = this.min || 0, max = this.max || 100, c_style, u, edge_w, val;
        this.setAttribute('value', this.value);
        if (this.classList.contains('tip')) {
            str += base_sel + thumb_sel[0] + a + ',' + base_sel + thumb_sel[1] + a + '{content:"' + this.value + s[idx] + '"}';
        }
        if (this.classList.contains('fill')) {
            if (idx == 0) {
                c_style = getComputedStyle(this);
                u = c_style.backgroundSize.split(' ')[0].split('px')[0];
                edge_w = (c_style.width.split('px')[0] - u * (max - min)) / 2;
                val = (this.value - min) * u + edge_w + 'px';
            } else {
                val = this.value + '%';
            }
            if (this.classList.contains('fill-replace')) {
                str += base_sel + track_sel[0] + '{background-size:' + val + '}';
            }
            str += base_sel + track_sel[1] + a + ',' + base_sel + track_sel[2] + a + '{width:' + val + '}';
        }
        styles[idx] = str;
        style_el.textContent = styles.join('');
    }, false);
}
window.CP.exitedLoop(1);

via:http://www.w2bc.com/article/2015-12-22-four-input-ui

你可能感兴趣的:(4种input元素滑块UI样式)