【问题标题】:How to change color, size and shape of elements in a range slider?如何更改范围滑块中元素的颜色、大小和形状?
【发布时间】:2022-02-06 00:28:39
【问题描述】:

我在编码或网络开发方面没有任何专业知识。在 Google 进行了数小时的研究后,我最终编写了一组 (完美运行) 代码来构建一个包含 HTML、CSS 和 JS 的范围滑块。

我正在使用这个滑块来改变我智能手机中的媒体音量,this Media Control Panel 是使用名为 Tasker 的 Android 应用程序创建的。我的滑块功能正常,但我想对我的滑块进行一些外观更改。

有人可以帮我在我的代码中实现以下功能吗?

  1. 滑块之前滑块部分的颜色/渐变。
  2. 拇指后滑块部分的颜色/渐变。
  3. 拇指的大小、形状、颜色和不透明度。

这是当前代码。随意编辑。

<div class = "container">
    <input type="range" 
    min="0" 
    max="25" 
    step="any" 
    value="%VOLM" 
    id="volm">
</div>

<style>
.container{
    display:flex;
    width:100%;
    padding-top:5
}

#volm{
    -webkit-appearance: none;
    background-color: magenta;
    border-radius: 2px;
    width:153px;
    height:5px;
</style>

<script>
    var slider = document.getElementById("volm");
    slider.addEventListener("input",function() 
{
    performTask("WebView Slider - Media Volume",1,slider.value,)}, false);
</script>

【问题讨论】:

  • ReferenceError: performTask is not defined 这也是问题的一部分吗?
  • 为什么不制作自定义滑块元素?这样您就可以更好地控制 UI。
  • @consolenine,老实说我不知道​​。现有代码是我在 Google 上花费数小时后才发现的。许多教程的混合。
  • @DavidThomas 就是这个滑块的输出。每当我移动滑块时,滑块值都会发送到该代码之外的指定任务(Tasker Android 应用程序).​​..不要介意...我现在想要的只是对我的滑块进行一些外观更改。其余工作正常。
  • @ShebeerPrince 学习一下这个 CodePen,真的很有用codepen.io/brandonmcconnell/pen/oJBVQW

标签: javascript html css web slider


【解决方案1】:

HTML Range Input 有以下两个伪元素:

  1. -webkit-slider-runnable-track
  2. -webkit-slider-thumb

您可以使用伪选择器设置它们的样式。 这个CodePen 有一个聪明的解决方案来实现你想要的。通过在拇指上使用框阴影,您可以设置拇指前后区域的样式。 使用多个 box-shadows + bluring 来实现类似渐变的效果。

我稍微编辑了您的代码以显示如何实现上述目标。休息只是关于您希望滑块看起来如何的偏好。您还可以使用 JavaScript 根据输入动态更改属性值。

.container{
    display:flex;
    width:100%;
    padding-top:5;
    height: fit-content;
}

#volm{
    position: relative;
    margin-top: 5px;
    border-radius: 2px;
    width:153px;
    height: 5px;
    -webkit-appearance: none;
}
input::-webkit-slider-runnable-track {
  -webkit-appearance: none;
  position: relative;
  box-sizing: border-box;
  background-color: hsl(0deg, 0%, 90%);
  width: 100%;
  height: 20px;
  border-radius: 5px;
  overflow: hidden;
} 
input::-webkit-slider-thumb {
  position: relative;
  left: initial;
  bottom: 5px;
  -webkit-appearance: none;
  background-color: blue;
  width: 20px;
  height: 20px;
  border-radius: 20px;
  box-shadow: -340px 0 0 320px #1597ff, inset 0 0 0 40px #1597ff, 340px 0 0 320px #00f18f, inset 0 0 0 40px #1597ff;
  margin-top: 5px;
}
<div class = "container">
    <input type="range" 
    min="0" 
    max="25" 
    step="any" 
    value="%VOLM" 
    id="volm">
</div>

【讨论】:

  • 非常感谢我的朋友@consolenine。你给了我我想要的一切。我制作了a few changes to your code 并实现了我正在寻找的东西。非常感谢您同时帮助我和教导我。如您所述,将研究如何实现渐变。因为它不是那么重要,所以我现在正在完成我的代码。再次感谢:)
  • 嘿@consolenin,this is how 我的滑块在实施你教给我的之后看起来像。谢谢☺️??
  • 我完全移除了左侧拇指阴影,然后使用“background: linear-gradient(to right,1stColor,2ndColor);”将滑块背景设置为渐变色制作一个gradient like this。感谢您提供的代码,只有我根据自己的口味逐步改进 steb ???
猜你喜欢
  • 2020-06-14
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多