Slider-6ren"> Slider-我使用 example from w3schools 设置了常规范围 slider 的样式.我的目标是向外部基于 MQTT 的智能家居发送一个新值命令,并首先将旧值显示为某种幽灵拇指: smartho-6ren">
gpt4 book ai didi

javascript - 将旧值作为 "ghost"thumb 添加到 <input type ="range"> Slider

转载 作者:可可西里 更新时间:2023-11-01 13:42:54 25 4
gpt4 key购买 nike

enter image description here

我使用 example from w3schools 设置了常规范围 slider 的样式.我的目标是向外部基于 MQTT 的智能家居发送一个新值命令,并首先将旧值显示为某种幽灵拇指:

enter image description here

smarthome 系统确认新值后,气泡将被移除 - 但目前这不是我的问题。我想把幽灵放在 slider 的背景和真实值拇指之间,目前它看起来像这样:

enter image description here

在这里你可以看到 result on JSFiddle , 这是代码:

$('#slider_1').data('last-mqtt-value', 0.5);

$('#slider_1').on('input', function() {
// Show ghost slider
$('#slider_1_companion').css('left', 'calc('+ $(this).data('last-mqtt-value') / $(this).attr('max') +'* (100% - 20px))');
$('#slider_1_companion').css('display', 'block');
});

$('#slider_1').on('change', function() {
console.log( $(this).data('last-mqtt-value'), $(this).val() );

// Simulate new input value incoming
///*
setTimeout(() => {
$(this).data('last-mqtt-value', $(this).val());
$('#slider_1_companion').css('display', 'none');
},5000);
// */
});
.slider {
-webkit-appearance: none;
width: 100%;
height: 10px;
border-radius: 5px;
background: #ccc;
outline: none;
}

.slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 20px;
height: 20px;
border-radius: 50%;
background: #6c757d;
cursor: pointer;
z-index: 5;
}

.slider::-moz-range-thumb {
width: 20px;
height: 20px;
border-radius: 50%;
background: #6c757d;
cursor: pointer;
z-index: 5;
}
/*https://stackoverflow.com/a/46318225/1997890*/
.slider_wrapper {
position: relative;
width: 150px;
}
.slider_companion {
background-color: #ccc;
border-radius: 50%;
width: 20px;
height: 20px;
position: absolute;
top: calc(100% - 19px); /* for some reason this is not 20px (height of thumb) */
/* left: calc( PERCENTAGE * (100% - 20px)); /* add this line dynamically via jQuery */
display: none;
pointer-events: none; /*click-through*/
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="slider_1_wrapper" class="slider_wrapper">
<div id="slider_1_companion" class="slider_companion"></div>
<input type="range" id="slider_1" class="slider" min="0" max="1.0" step="any">
</div>

最佳答案

我会考虑为 slider 使用 box-shadow,您可以使用 CSS 变量进行调整,无需额外的元素,您将获得预期的结果。

这是一个想法:

$('#slider_1').data('last-mqtt-value', 0.5);

$('#slider_1').on('input', function() {
document.getElementById('slider_1_wrapper').style.setProperty("--c",
($(this).data('last-mqtt-value') - $(this).val() )*130 + 'px');
/*130 = 150 - 20 = width of wrapper - width of thumb*/

});

$('#slider_1').on('change', function() {
console.log( $(this).data('last-mqtt-value'), $(this).val() );

// Simulate new input value incoming
///*
setTimeout(() => {
$(this).data('last-mqtt-value', $(this).val());
document.getElementById('slider_1_wrapper').style.setProperty("--c",0);
},5000);
// */
});
.slider {
-webkit-appearance: none;
width: 100%;
height: 10px;
border-radius: 5px;
background: #ccc;
outline: none;
}

.slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 20px;
height: 20px;
border-radius: 50%;
background: #6c757d;
cursor: pointer;
z-index: 5;
box-shadow:var(--c,0) 0 0 red;
}

.slider::-moz-range-thumb {
width: 20px;
height: 20px;
border-radius: 50%;
background: #6c757d;
cursor: pointer;
z-index: 5;
box-shadow:var(--c,0) 0 0 red;
}
.slider_wrapper {
width: 150px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="slider_1_wrapper" class="slider_wrapper">
<input type="range" id="slider_1" class="slider" min="0" max="1.0" step="any">
</div>

关于javascript - 将旧值作为 "ghost"thumb 添加到 &lt;input type ="range"> Slider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51570996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com