开发者社区> 问答> 正文

Js如何获取<input type="range">的滑块::-webkit-slider-thumb的样式?

screenshot

如上图,我用css重置了的样式,现在我想获取到滑块的left值,可以实现吗?
代码如下

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    <title>demo</title>
    <style>
    .range-input {
        position: relative;
    }
    input[type=range] {
        -webkit-appearance: none;
        overflow: hidden;
        width: 100%;
        height: 40px;
        outline: 0;
        background: none;
    }
    
    input[type=range]:focus,
    input[type=range]:active {
        background: none;
    }
    /*滑块*/
    
    input[type=range]::-webkit-slider-thumb {
        -webkit-appearance: none;
        position: relative;
        height: 30px;
        width: 30px;
        border: 0;
        border-radius: 50%;
        background: #fff;
        cursor: pointer;
        -webkit-box-shadow: 0 2px 7px -5px rgba(0, 0, 0, 1);
        box-shadow: 0 2px 7px -5px rgba(0, 0, 0, 1);
    }
    
    input[type="range"]::-webkit-slider-thumb:before,
    input[type="range"]::-webkit-slider-thumb:after {
        position: absolute;
        top: 13px;
        width: 2000px;
        height: 5px;
        content: "";
        pointer-events: none;
        transition: .2s;
    }
    
    input[type="range"]::-webkit-slider-thumb:before {
        left: -2000px;
        background: #de1c16;
    }
    
    input[type="range"]::-webkit-slider-thumb:after {
        left: 30px;
        background: #d9d9d9;
    }
    .range-val {
    position: absolute;
    bottom: -15px;
    left: 0;
    -webkit-transform: translateX(-50%);
    transform: translateX(-50%);
    display: block;
    padding: 5px;
    background: #de1c16;
    color: #fff;
    }
    .range-val:before {
        content: '';
        position: absolute;
        top: -7px;
        left: 50%;
        margin-left: -7px;
        display: block;
        width: 0;
        height: 0;
        border-left: 7px solid transparent;
        border-right: 7px solid transparent;
        border-bottom: 7px solid #de1c16;
    }
    </style>
</head>

<body>
    <div class="range-input">
        <input type="range" class="range" min="1000" max="10000" step="1000" value="2000">
        <span class="range-val">2000</span>
    </div>
</body>

</html>

展开
收起
杨冬芳 2016-06-08 11:36:23 3560 0
1 条回答
写回答
取消 提交回答
  • IT从业
    var range = document.getElementById('range');
    var span = document.getElementById('span');
    var cs = getComputedStyle(range, 0);
    range.onchange = function() {
        span.style.left = ((range.value - 1000) * parseInt(cs.width) / 9000
            + 18 - range.value/300) + "px";
        span.innerHTML = range.value;
    };
    range.onchange();
    2019-07-17 19:31:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载