如何让noUiSlider中的缩放区域可点击移动手柄?

How to make the scale area clickable in noUiSlider to move the handle?

当我们add a scale/pips to the slider时,这个新区域不可点击来改变手柄的位置。因为我想使用细轨道样式,这对用户体验来说可能是个问题。

我试图遵循这个 issue 关于处理程序的想法,但这修改了那种情况下所有元素的所有一致性。

如何使这个新区域可以点击移动手柄?

您可以找到 example on JSFiddle.

缩放区域已添加:

pips: {
  mode: 'steps',
  density: 10
}

要获得所需的结果,您可以更改匹配 .noUi-base.noUi-connect 的元素的高度。在这个 updated fiddle 中,我添加了这个 CSS:

#slider .noUi-base {
  /* makes the clickable area larger for pips */
  height: 55px;
}

#slider .noUi-connect {
  /* shrinks child of prev style to its original height */
  height: 18px;
}

作为建议,您可能希望为 "clickablePips" 制作一个不同的 class,您将以 .clickablePips .noUi-base { /*CSS rules...*/ } 等为目标。这样,开发人员就可以声明其意图这种样式不是让样式规则影响匹配 #slider.

的所有项目

要使该区域可点击,您可以将 pip 的样式设置为指针并监听点击事件,如下所示:

let values = testSlider.getElementsByClassName('noUi-value');
for(let val of values){
    val.pip = val.innerHTML;
    val.style.cursor = 'pointer';
    val.onclick = (e) => {
        testSlider.noUiSlider.set(val.pip);
    }
}
  1. let values = slider.getElementsByClassName('noUi-value'); - 选择滑块内的所有点值。
  2. for (let val of values) - 遍历每个点
  3. val.style.cursor = 'pointer'; - 将每个点光标设置为指针
  4. val.pip = val.innerHTML; - 将点值 (0, 10,20...) 保存在 HTML 元素本身
  5. val.onclick = (e) => { slider.noUiSlider.set(val.pip); } - 单击时将滑块的值设置为单击的值。

Working JSFiddle