我有一个创建定制范围输入引用this。它在Chrome,IE和EDGE上运行良好,但是,EDGE存在一个问题。滑块轨道上的第一次单击会更改拇指位置,但不会更改值。随后的点击工作正常。
请在EDGE中打开此fiddle以观察此行为。
HTML:
<input id="sel" type="range" min="5" max="100" value="50" step="5">
<h3>Slider Value: <span id="range"></span></h3>
JS:
(function () {
var sel = document.querySelector('#sel');
document.querySelector('#range').innerText = sel.value;
sel.addEventListener('change', function (){
document.querySelector('#range').innerText = sel.value;
});
})()
CSS:
#sel {
width:500px;
}
input[type=range] {
-webkit-appearance: none;
margin: 18px 0;
width: 100%;
}
input[type=range]:focus {
outline: none;
}
input[type=range]::-webkit-slider-runnable-track {
width: 100%;
height: 8.4px;
cursor: pointer;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
background: #3071a9;
border-radius: 1.3px;
border: 0.2px solid #010101;
}
input[type=range]::-webkit-slider-thumb {
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
border: 1px solid #000000;
height: 30px;
width: 30px;
border-radius: 100%;
background: #ffffff;
cursor: pointer;
-webkit-appearance: none;
}
input[type=range]:focus::-webkit-slider-runnable-track {
background: #367ebd;
}
input[type=range]::-ms-track {
width: 100%;
height: 8.4px;
cursor: pointer;
background: transparent;
border-color: transparent;
border-width: 16px 0;
color: transparent;
}
input[type=range]::-ms-fill-lower {
background: #2a6495;
border: 0.2px solid #010101;
border-radius: 2.6px;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]::-ms-fill-upper {
background: #3071a9;
border: 0.2px solid #010101;
border-radius: 2.6px;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]::-ms-thumb {
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
border: 1px solid #000000;
height: 30px;
width: 30px;
border-radius: 100%;
background: #ffffff;
cursor: pointer;
}
input[type=range]:focus::-ms-fill-lower {
background: #3071a9;
}
input[type=range]:focus::-ms-fill-upper {
background: #367ebd;
}
感谢您的帮助。
从处理change
事件切换到处理input
似乎解决了这个问题:
sel.addEventListener('input', function (){
document.querySelector('#range').innerText = sel.value;
});
https://jsfiddle.net/tz1mhys0/
似乎仍然可以在Chrome中使用,我目前无法测试的其他浏览器。如果你发现一个input
无效的地方,我想为这两个事件添加处理程序也可能不会造成太大的伤害。