javascript - 当我击中拇指不完全在中心时,使输入范围不跳跃

标签 javascript html css

下面是范围类型的 HTML 输入。我把它放大了,这样它就更引人注目了。当我将鼠标放在红色拇指上并移到一边时,如果我不是完全在拇指的中心,它会跳跃,使鼠标光标位于拇指的中心,然后它会正常移动。

是否有可能改变它,以便在第一次移动时没有第一次突然跳跃?

input[type=range] {
  -webkit-appearance: none;
  pointer-events: none;
  background-color: green;
} 
input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 1cm;
  height: 1cm;
  background-color: red;
  cursor: pointer;
  pointer-events: auto !important;
}
<input type="range">   

最佳答案

恐怕实现这一目标的唯一方法是用 Javascript 覆盖范围行为。

我是用 jQuery 做的,但它可以用 vanilla JS 或任何其他 JS 框架来做。

请注意,我已经修复了 CSS 以使其在 Firefox 中工作。
我还必须使用 px而不是 cm为拇指宽度,以便可以将此值提供给 JS。

function overrideSliderBehavior() {
  var el = $(this);
  var thumbWidth = parseFloat(el.data('thumb-width'));
  if(!thumbWidth) {
    return;
  }
  var dragOrigin = null;
  el.on('mousedown', function(evt) {
    evt.preventDefault();
    dragOrigin =  {
    	x:event.clientX,
        val:parseFloat(el.val())
    };
  });
  $(document).on('mouseup', function(){
    dragOrigin = null;
  });
  $(document).on('mousemove', function(evt) {
    if(dragOrigin !== null) {
      evt.preventDefault();
      var rect = el[0].getBoundingClientRect();
      var offsetX = (event.clientX - dragOrigin.x);
      var offsetVal = offsetX/(rect.width - thumbWidth);
      var max = el[0].max || 100;
      var min = el[0].min || 0;
      el.val(dragOrigin.val + offsetVal*(max - min));
    }
  });
}

$(document).ready(function() {
    $('input[type=range]').each(overrideSliderBehavior);
});
input[type=range] {
  -webkit-appearance: none;
  pointer-events: none;
  background-color: green;
  height: 38px;
} 
input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 38px;
  height: 38px;
  background-color: red;
  cursor: pointer;
  pointer-events: auto !important;
}
input[type=range]::-moz-range-thumb {
  width: 38px;
  height: 38px;
  background-color: red;
  cursor: pointer;
  pointer-events: auto !important;
  border: none;
  border-radius: 0;
}
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"   integrity="sha256-4+XzXVhsDmqanXGHaHvgh1gMQKX40OUvDEBTu8JcmNs="   crossorigin="anonymous"></script>

<input type="range" data-thumb-width="38"> 

关于javascript - 当我击中拇指不完全在中心时,使输入范围不跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58912344/

相关文章:

javascript - 在 React.js 应用程序中从广告合作伙伴加载外部脚本

html - 子元素不响应绝对定位

javascript - 通过运行 html 文件窃取用户数据

html - 垂直对齐问题

javascript - 从 div 中查找 UL

javascript - 将动态创建的文本区域中的文本存储在 localStorage 中

javascript - 如何验证电子邮件地址在java脚本中只允许两个域

javascript - 基于单击按钮在 Div 中呈现新 View | AngularJS

jQuery Block UI 字体更改不起作用?

javascript - 如何在 Sanity 中定义标记化标签字段?