Javascript 属性上的悬停效果
我正在尝试找出如何在我的范围输入滑块的Javascript 属性上的悬停效果,javascript,html,css,reactjs,Javascript,Html,Css,Reactjs,我正在尝试找出如何在我的范围输入滑块的-sliderthumb属性上制作10px光环。我正在使用React、CSS和HTML,发现这很难做到,因为overflow:hidden属性。这个属性必须保留,因为基本上没有它的代码都不能工作(这是编辑滑块基css的解决方案的一部分)。我尝试过使用::after和::before,但没有效果。所以我想知道我做错了什么,或者这是否可能,因为我还没有找到任何关于它的文档。下面提供了代码和代码笔。谢谢你的帮助/建议 HTML: JS(巴别塔) class Vol
-sliderthumb
属性上制作10px光环。我正在使用React、CSS和HTML,发现这很难做到,因为overflow:hidden
属性。这个属性必须保留,因为基本上没有它的代码都不能工作(这是编辑滑块基css的解决方案的一部分)。我尝试过使用::after和::before,但没有效果。所以我想知道我做错了什么,或者这是否可能,因为我还没有找到任何关于它的文档。下面提供了代码和代码笔。谢谢你的帮助/建议
HTML:
JS(巴别塔)
class VolumeSlider扩展React.Component{
构造函数(){
超级();
此.state={
价值:120.5
};
}
更新日期(e){
这是我的国家({
价值:即目标价值
});
}
render(){
返回(
这个。更新(e)}
步骤={0.1}
type=“范围”
value={this.state.value}
/>
{this.state.value}c
);
}
}
ReactDOM.render(
,
document.getElementById(“根”)
);
看看这支钢笔,希望这就是你要找的,解释: 我添加了after和position绝对,输入相对位置,after 1px X 1px,inset,然后将X轴从0平移到我想要的任何值
input[type='range']::after{
content: "";
position: absolute;
top: 0px;
left: 0px;
border-radius: 50%;
visibility: hidden;
width: 1px;
height: 1px;
box-shadow: 0 0 10px 5px #fff, inset 0 0 10px 5px #fff;
}
input[type='range']:hover::after{
visibility: visible;
animation: wave 2s forwards;
}@keyframes wave {
0% {
transform:translateX(0);
}
100% {
transform:translateX(500px);
}
}
使用CSS滑块不适用于跨平台,它在不同的浏览器中是不同的显示。你可以试试这个插件:这是你想要的吗
input[type='range'] {
-webkit-appearance: none;
background-color: #ddd;
height: 10px;
overflow: hidden;
width: 300px;
border-radius: 5px;
outline: none;
}
input[type='range']::-webkit-slider-runnable-track {
-webkit-appearance: none;
height: 10px;
}
input[type='range']::-webkit-slider-thumb {
-webkit-appearance: none;
--slider-thumb-background-color: #000;
background: var(--slider-thumb-background-color);
border-radius: 50%;
--box-shadow-color: orange;
box-shadow: -205px 0 0 200px var(--box-shadow-color);
cursor: pointer;
height: 10px;
width: 10px;
--border-color: orange;
border: 3px solid var(--border-color);
}
input[type='range']::-webkit-slider-thumb:hover::after {
content: '';
height: 10px;
width: 10px;
border-radius: 5px;
color: yellow;
}
input[type='range']::-webkit-slider-thumb:hover {
--slider-thumb-background-color: grey;
--box-shadow-color: red;
--border-color: red;
}
input[type='range']::-webkit-slider-thumb:active {
--slider-thumb-background-color: white;
--box-shadow-color: blue;
--border-color: blue;
}
input[type='range']::-webkit-slider-thumb:focus {
--slider-thumb-background-color: white;
--box-shadow-color: yellow;
--border-color: yellow;
}
input[type='range']::-webkit-slider-thumb:hover:after {
border: 10px solid rgb(111, 111, 0.4);
overflow: auto;
postion: fixed;
}
input[type='range']::-moz-range-thumb {
background: #333;
border-radius: 50%;
box-shadow: -1005px 0 0 1000px red;
cursor: pointer;
height: 10px;
width: 10px;
border: 0;
}
class VolumeSlider extends React.Component {
constructor() {
super();
this.state = {
value: 120.5
};
}
onUpdate(e) {
this.setState({
value: e.target.value
});
}
render() {
return (
<div>
<div className="mb1">
<input
className="c-input--range"
list="tickmarks"
max={1200}
onChange={(e) => this.onUpdate(e)}
step={0.1}
type="range"
value={this.state.value}
/>
<div>
<label className="c-label">{this.state.value}c</label>
</div>
</div>
</div>
);
}
}
ReactDOM.render(
<div>
<VolumeSlider />
</div>,
document.getElementById("root")
);
input[type='range']::after{
content: "";
position: absolute;
top: 0px;
left: 0px;
border-radius: 50%;
visibility: hidden;
width: 1px;
height: 1px;
box-shadow: 0 0 10px 5px #fff, inset 0 0 10px 5px #fff;
}
input[type='range']:hover::after{
visibility: visible;
animation: wave 2s forwards;
}@keyframes wave {
0% {
transform:translateX(0);
}
100% {
transform:translateX(500px);
}
}