You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁用input range鼠标滚轮滚动功能并设置默认值

解决Range输入框的滚轮误触与初始值设置问题

咱们一步步来搞定你遇到的两个问题:阻止滚轮改变range的值,以及确保默认初始值正确生效。

一、阻止滚轮修改Range值

你之前尝试CSS和jQuery没成功,其实最直接的方式是给range元素添加滚轮事件监听,阻止它的默认行为就行。因为你用了D3,咱们直接用D3的事件绑定来实现:

// 在设置完range的min、max、value之后,添加这个监听
range_year.on("wheel", function(event) {
  event.preventDefault(); // 彻底阻止滚轮改变range值的默认行为
});

这样不管鼠标是不是停在range输入框上滚动,都不会再触发值的变化了,完全只保留点击选择的操作方式。

二、确保默认初始值正确显示

看你的代码,其实已经用.attr("value", max)设置了初始值,但可能是因为没有同步更新页面上的chosen_year span,所以看起来没生效。咱们在设置完属性后,手动更新一下显示,或者触发change事件让你的slideyear函数执行:

range_year.attr("min", min)
  .attr("max", max)
  .attr("value", max)
  .on("wheel", function(event) {
    event.preventDefault();
  });

// 方式1:直接更新span显示初始年份
d3.select("#chosen_year").text(max);

// 方式2:触发change事件,让slideyear自动处理
// range_year.node().dispatchEvent(new Event('change'));

修改后的完整代码

把上面的修改整合到你的代码里,最终版本是这样的:

<input type="range" id="range_year_donut" min="" max="" value="" onchange="slideyear()"> 
<span id="chosen_year"></span>

<script>
var range_year = d3.select("#range_year_donut");

d3.csv("http://raw.githubusercontent.com/cvrnogueira/CODWorkData/master/database/final_data_set.csv").then(function(data){ 
  let max = d3.max(data, function(d) {return +d.year}); 
  let min = d3.min(data, function(d) {return +d.year}); 

  range_year.attr("min", min)
    .attr("max", max)
    .attr("value", max)
    .on("wheel", function(event) {
      event.preventDefault(); // 阻止滚轮修改值
    });

  // 初始化显示最大年份
  d3.select("#chosen_year").text(max);
}); 

function slideyear(){ 
  let year = range_year.node().value; 
  d3.select("#chosen_year").text(year); // 确保每次选择后更新显示
}
</script>

这样两个问题就都解决了:滚轮不会再误改range的值,默认初始值也会正确显示在页面上啦。

内容的提问来源于stack exchange,提问作者Catarina Nogueira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:02:04