.slider :: - javascript中需要的webkit-slider-thumb

时间:2018-01-17 09:07:24

标签: javascript html css webkit

我想创建一个滑块,在值更改时更改点大小。 因此,值1的大小为10px,值100的大小为100px。

如何使用javascript更改.slider :: - webkit-slider-thumb高度?



var slider = document.getElementById("myRange");
var output = document.getElementById("demo");
output.innerHTML = slider.value;

slider.oninput = function() {
  output.innerHTML = this.value;
}

.slidecontainer {
  width: 100%;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  height: 15px;
  border-radius: 5px;
  background: #d3d3d3;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
}

.slider:hover {
  opacity: 1;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
}

.slider::-moz-range-thumb {
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
}

<h1>Round Range Slider</h1>

<div class="" "slidecontainer">
  <input type="range" min="1" max="100" value="50" class="slider" id="myRange">
  <p>Value: <span id="demo"></span></p>
</div>
&#13;
&#13;
&#13;

我尝试了什么=

document.getElementById("myRange").style.webkitTransform = "height: 100px";

1 个答案:

答案 0 :(得分:1)

好的,所以,在回答这个问题之前:

::-webkit-slider-thumb是一个伪元素。这些元素不属于DOM。因此,在JavaScript中更改它们可能会有点hacky。

一个合适的解决方案是用另一个元素完全取代拇指。

现在回答这个问题:当滑块值发生变化时,您可以将样式注入具有给定属性的<style>元素。

所以你要添加

<style data="test" type="text/css"></style>

到你的标题,然后定位元素并将CSS添加到它:

var style = document.querySelector('[data="test"]');
style.innerHTML = ".class { property: value; }";

这与您提供的代码at this link相结合,可以解决您的问题。

<强>演示

&#13;
&#13;
var slider = document.getElementById("myRange");
var output = document.getElementById("demo");
var style = document.querySelector('[data="test"]');

setData(slider.value);

slider.oninput = function() {
    setData(this.value);
}

function setData(x){
    output.innerHTML = x;
    style.innerHTML = ".slider::-webkit-slider-thumb { width: " + x + "px !important; height: " + x + "px !important; }";
}
&#13;
.slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 25px;
    height: 25px;
    border-radius: 50%;
    background: #4CAF50;
    cursor: pointer;
}
.slider {
    margin-top: 40px;
    -webkit-appearance: none;
    width: 100%;
    height: 15px;
    border-radius: 5px;
    background: #d3d3d3;
    outline: none;
}
&#13;
<style data="test" type="text/css"></style>

<input type="range" min="1" max="100" value="50" class="slider" id="myRange">
<p>Value: <span id="demo"></span></p>
&#13;
&#13;
&#13;

另外:你说

  

因此,值1的大小为10px,值100的大小为100px。

如果您希望值1到10等方法等于10px,高于值10的所有值都是实际值(以像素为单位),则可以更改行

style.innerHTML = "...";

style.innerHTML = ".slider::-webkit-slider-thumb { width: " + (x < 10 ? 10 : x)  + "px !important; height: " + (x < 10 ? 10 : x) + "px !important; }";

可以找到此版本的现场演示 HERE