简体   繁体   English

如何使用普通 javascript 创建输入范围

[英]How to create a input range using plain javascript

Is there any way to recreate the input range using plain js (without using jQuery).有什么方法可以使用纯 js(不使用 jQuery)重新创建输入范围。

Expected Result预期结果

 <input type="range">

My current work我目前的工作

 function slide(e,t) { t.style.paddingLeft = e.clientX-t.offsetLeft+'px'; }
 div { width: 400px; height: 10px; background-color: #aaa; margin: 20px 0; box-sizing: border-box; } div>div { height: 10px; width: 10px; background-color: black; border: 1px solid black; transform: translate(-10%, -10%); }
 <div onclick="slide(event,this)" onmouseover="slide(event,this)"> <div></div> </div>

Problem问题

In an actual input range the thumb only moves when we are dragging it but here it moves when we are hovering over it.在实际的输入范围内,只有当我们拖动它时,拇指才会移动,但在这里,当我们将鼠标悬停在它上面时,它会移动。 is there any way to move it when we are only dragging it?.当我们只拖动它时,有什么办法可以移动它吗?。 Even in an example with many sliders in the same page.即使在同一页面中有许多滑块的示例中也是如此。

Any help in rephrasing the question is highly appreciated.非常感谢任何帮助改写问题的帮助。

Is this what u wanted?这是你想要的吗?

 function slide(e,t) { t.children[0].style.paddingLeft = e.clientX-t.offsetLeft+'px'; }
 div { position:relative; width: 400px; max-width:400px; height: 10px; background-color: #efefef; border-radius: 10px; border: 1px solid #d6d6d6; /* margin: 20px 0; */ box-sizing: border-box; cursor: pointer; } div > div { /* position: absolute; */ top: -2px; height: 14px; width: 14px; background-color: #0075FF; border: 1px solid black; /* transform: translate(-50%, -50%); */ max-height: fit-content; } div > div:after{ content: ''; position: absolute; background: #0075FF; border-radius: 50%; top: -4px; right: -4px; height: 20px; width: 20px; }
 Mouse Click only <br> <br> <div onclick="slide(event,this)" > <div></div> </div> <br> <br> <br> Mouse Move <br> <br> <div onclick="slide(event,this)" onmousemove="slide(event,this)"> <div></div> </div> <br> <br> <br> Mouse Drag <br> <br> <div onclick="slide(event,this)" draggable="true" ondrag="slide(event,this)"> <div></div> </div>

Here would be an example of how to do it just when the mouse is pressed and the mouse moves:下面是一个例子,说明如何在按下鼠标和移动鼠标时执行此操作:

 const slider = document.querySelector(".slider"); let mouseDown = false; const setMouseDown = () => { mouseDown =;mouseDown. console;log(mouseDown). } slider,addEventListener("mousedown". function(event) { window,addEventListener("mouseup"; setMouseDown); slide(event); setMouseDown(); }). slider,addEventListener("mousemove"; slide). function slide(event) { if (mouseDown) this.style.paddingLeft = event.clientX - this;offsetLeft + 'px'; }
 div { width: 400px; height: 10px; background-color: #aaa; margin: 20px 0; box-sizing: border-box; } div>div { height: 10px; width: 10px; background-color: black; border: 1px solid black; transform: translate(-10%, -10%); }
 <div class="slider"> <div></div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM