【问题标题】:Using JS to determine range slider background widths使用 JS 确定范围滑块背景宽度
【发布时间】:2020-08-20 00:50:54
【问题描述】:

我正在尝试使用 jQuery 控制范围滑块轨道背景宽度。但是,我对为什么背景似乎与滑块的位置不匹配而摸不着头脑。

您可以在此处查看工作页面:https://qh.brightchoicemarketing.com/hosting/cloud-vps-hosting/ (在 Chrome 或任何其他 Webkit 浏览器上查看)

这是我的代码:

// .chrome styling
    $( 'input' ).on( 'input', function( ) {
        var x = document.getElementById("cpu").max;
        var x = document.getElementById("ram").max;
        var x = document.getElementById("ssd").max;
        console.log(x);
        y = this.value - 1;
        console.log(y);
        var percentWidth = ((y / x) * 100);
        console.log(percentWidth);
        $( this ).css( 'background', 'linear-gradient(to right, #da0266 0%, #00aeff '+percentWidth +'%, #eef1f8 ' + percentWidth + '%, #eef1f8 100%)' );
    } );

我正在将值记录到控制台,并且百分比似乎是正确的。我接下来想也许我已经设置了一个手动偏移来移动滑块,但我没有,当你从左到右移动滑块时,背景似乎从太小到太大(这让我觉得它是一个乘数问题...)。

我的数学正确吗?我从滑块值中减去 1 以处理“0”位置,然后生成滑动拇指应处于的百分比宽度。

编辑: 我正在向除第一个滑块之外的所有滑块添加自定义值(这是为了确保它们在推送到商店之前显示用户实际选择的内容):

// Output value for CPU range slider
var sliderCPU = document.getElementById("cpu");
var outputCPU = document.getElementById("valueCPU");
outputCPU.innerHTML = sliderCPU.value;

sliderCPU.oninput = function() {
  outputCPU.innerHTML = this.value;
}

// Set and output custom values for Memory range slider
var valuesRAM = [0,"256 MB","512 MB","1 GB","2 GB","3 GB","4 GB","5 GB","6 GB","7 GB","8 GB","9 GB","10 GB","11 GB","12 GB"];

var sliderRAM = document.getElementById('ram'),
   outputRAM = document.getElementById('valueRAM');
sliderRAM.oninput = function(){
    outputRAM.innerHTML = valuesRAM[this.value];
};
sliderRAM.oninput();

// Set and output custom values for SSD range slider
var valuesSSD = [0,"10 GB","20 GB","30 GB","40 GB","50 GB","60 GB","70 GB","80 GB","90 GB","100 GB","200 GB","300 GB","400 GB","500 GB"];

var sliderSSD = document.getElementById('ssd'),
   outputSSD = document.getElementById('valueSSD');
sliderSSD.oninput = function(){
    outputSSD.innerHTML = valuesSSD[this.value];
};
sliderSSD.oninput();

【问题讨论】:

  • 背景与滑块不匹配是什么意思?渐变背景在 Firefox 中跟随滑块对我来说很好。我更新了您对 Chrome 的问题 - 似乎是 Chrome 中的一个问题
  • 谢谢,是的,这是 Webkit 浏览器的问题。也会影响 Safari。
  • 您的background-size 设置是否正确?不要使用auto
  • 我将它设置为cover,但似乎没有什么不同。

标签: javascript jquery css google-chrome webkit


【解决方案1】:

background-size: 105% 100% !important 添加到此选择器:

input[type="range"] {
        outline: none; 
        transition: background 450ms ease-in;
        -webkit-appearance: none;
        cursor: pointer;
        border-radius: 16px;
        height: 15px;
        -webkit-box-shadow: 0px 2px 2px rgba(255, 255, 255, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.3);
        background-size: 105% 100% !important
    }

似乎在 Chrome 和 Firefox 中对我有用

【讨论】:

  • “处理器”滑块仍然存在问题。认为这是计算?
  • 你是对的,奇怪的是为什么只有 1 受到影响。该滑块有什么独特之处吗?众所周知,webkit 在处理宽度/高度时需要将background-size 的两个值都设置为固定值。
  • 这是唯一一个我没有添加自定义值的滑块,我将把它添加到主要问题中。
  • 在多玩了一些设置之后,我将“处理器”滑块的最大值设置为 14,背景开始完美贴合。然后我意识到,无论我改变哪个滑块,x 值总是等于 14。我想可能是因为我在同一个脚本中设置 x 3 次,没有任何条件语句......
  • 终于修好了!我没有意识到,但我正在选择“输入”并应用样式。我将其更改为通过 ID 选择单个输入,现在一切正常!一般来说,您的答案是问题的实际解决方案,所以我已经标记了它!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
相关资源
最近更新 更多