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

5 html javascript 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;
}
Run Code Online (Sandbox Code Playgroud)
.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;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

我试过的=

document.getElementById("myRange").style.webkitTransform = "height: 100px";
Run Code Online (Sandbox Code Playgroud)

max*_*uty 10

2023 - 使用 CSS 变量

接受的答案有效,但代码很多并且很难理解。这些天这可以更容易地完成......

在你的 CSS 中添加一个像这样的变量--sliderSize

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

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: var(--sliderSize); /* <---- Set the variable here */
  height: var(--sliderSize); /* <--- and here */
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)

然后在 JavaScript 中只需使用以下命令将变量设置为您想要的任何内容setProperty

const newSliderSize = '100px'; // this could be a passed in dynamic value, etc.
document.getElementById("myRange").style.setProperty('--sliderSize', newSliderSize);
Run Code Online (Sandbox Code Playgroud)

这是将所有内容组合在一起的工作小提琴:

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

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: var(--sliderSize); /* <---- Set the variable here */
  height: var(--sliderSize); /* <--- and here */
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)
const newSliderSize = '100px'; // this could be a passed in dynamic value, etc.
document.getElementById("myRange").style.setProperty('--sliderSize', newSliderSize);
Run Code Online (Sandbox Code Playgroud)
    const newSliderSize = '50px'; // this could be a passed in dynamic value, etc.
    document.getElementById("myRange").style.setProperty('--sliderSize', newSliderSize);
Run Code Online (Sandbox Code Playgroud)


Nul*_*Dev 9

好的,那么,在回答问题之前:

::-webkit-slider-thumb是一个伪元素。这些元素不是DOM 的一部分。因此,在 JavaScript 中更改它们可能会有点麻烦。

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


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

所以你会添加

<style data="test" type="text/css"></style>
Run Code Online (Sandbox Code Playgroud)

到您的标题,然后定位元素并向其添加 CSS,如下所示:

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

这与您在此链接中提供的代码相结合将是您问题的解决方案。


演示

<style data="test" type="text/css"></style>
Run Code Online (Sandbox Code Playgroud)
var style = document.querySelector('[data="test"]');
style.innerHTML = ".class { property: value; }";
Run Code Online (Sandbox Code Playgroud)
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; }";
}
Run Code Online (Sandbox Code Playgroud)


还有:你说

所以值 1 的大小为 10px,值 100 的大小为 100px。

如果您想要一种方法,例如值 1 到 10 等于 10px 并且值 10 以上的所有内容都是以像素为单位的实际值,则可以更改该行

style.innerHTML = "...";
Run Code Online (Sandbox Code Playgroud)

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

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