css 我如何在HTML中做一个滑块,在后面用渐变填充自己

yrwegjxp  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(144)

我只是在玩HTML,我想做一个滑块,用渐变填充自己,我发现这几乎是不可能的。我已经研究了几个小时,我似乎不能找到一个答案。
我想我需要JS,但我完全空白。

.slidecontainer {
  justify-content: center;
  bottom: 0px;
  margin-left: auto;
}

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

.slider:hover {
  opacity: 1;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  border-radius: 5px;
  width: 25px;
  height: 25px;
  background: blue;
  cursor: pointer;
}

.slider::-moz-range-thumb {
  width: 25px;
  height: 25px;
  background: blue;
  cursor: pointer;
}
<div class="slidecontainer">
  <input type="range" min="1" max="100" value="1" class="slider" id="myRange">
</div>

我已经试过上面所说的了。我已经试过这个网站(https://codepen.io/kaiquenunes23/pen/LYEvegK)上的东西了,但是我不能把我的手指放在它周围。
我也读过StackOverflow上的多个其他线程。

92dk7w1h

92dk7w1h1#

您需要JS来获取拇指的当前位置。
这段代码通过读取滑块上的位置并计算它移动的百分比来实现,然后将CSS变量--pc设置为该百分比值。
滑块有两个背景图像,第一个是透明到拇指的,然后是你想要的灰色。"在它下面"是第二个背景图像,它是你想要的线性渐变。
通过这种方式,当您向右移动滑块时,线性渐变将显示出来。

const slider = document.getElementById("myRange");
slider.addEventListener("input", update);

function update() {
  const pc = (slider.value - slider.min) / (slider.max - slider.min) * 100 + '%';
  slider.style.setProperty('--pc', pc);
}
.slidecontainer {
  justify-content: center;
  bottom: 0px;
  margin-left: auto;
}

.slider {
  -webkit-appearance: none;
  appearance: none;
  border-radius: 5px;
  width: 100%;
  height: 25px;
  --pc: 0;
  background: linear-gradient(to right, transparent 0 var(--pc), #d3d3d3 var(--pc) 100%), linear-gradient(to right, red, green);
  outline: none;
  opacity: 0.8;
  -webkit-transition: .2s;
  transition: opacity .2s;
}

.slider:hover {
  opacity: 1;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  border-radius: 5px;
  width: 25px;
  height: 25px;
  background: blue;
  cursor: pointer;
}

.slider::-moz-range-thumb {
  width: 25px;
  height: 25px;
  background: blue;
  cursor: pointer;
}
<div class="slidecontainer">
  <input type="range" min="1" max="100" value="1" class="slider" id="myRange">
</div>
bmp9r5qi

bmp9r5qi2#

试试这个

<div class="slidecontainer">
  <input type="range" min="1" max="100" value="1" class="slider" id="myRange">

相关问题