【问题标题】:How to set different margins and limits for connected ranges如何为连接范围设置不同的边距和限制
【发布时间】:2019-03-25 21:49:52
【问题描述】:

我正在使用NoUiSlider,我的主要用例是拥有多个可以独立运行的范围。

例如,2 个范围代表 2 个年度范围:

  • 2002 年的一个范围(2002 年初至 2002 年底)
  • 从 2007 年初到 2010 年底的一个范围。

此外,两个范围都可以在轴上移动以更改涵盖的年份,并且范围大小也可以更改为包括更多或更少的年份。

 

这很好用。

但是,我确实有一些限制。例如,用户不能创建大于或小于某个大小的范围。 NoUiSlider 确实有控制这个的选项:MarginLimit。这些确实执行了限制,但它们对所有句柄(在所有范围内)全局起作用。

我真的只关心在单个范围内的连接句柄之间执行规则。

在这个小提琴中:https://jsfiddle.net/hbL4v0ce/ 你可以看到行为。

var slider = document.getElementById('slider');

noUiSlider.create(slider, {
  start: [2002, 2003, 2008, 2012],
  step: 1,
  connect: [false, true, false, true, false],
  margin: 0,
  limit: 4,
  behaviour: 'drag',
  range: {
    'min': 2000,
    'max': 2016
  },
  pips: {
    mode: 'steps',
    density: -1
  },
});

无法再将右侧范围移动到右侧,因为其中一个手柄已经在配置的距离左侧范围 4 个单位的限制范围内,同样左侧范围也无法再向左移动。这不是我想要的行为。

如果我可以为每个连接范围指定单独的限制/边距,我认为这将解决我的问题。是否有可能做到这一点?还是有其他方法可以实现我的目标?

【问题讨论】:

    标签: javascript nouislider


    【解决方案1】:

    noUiSlider 没有针对不同手柄使用不同边距/限制的功能。您有多种选择:

    • 从滑块中提取年份,并将滑块值映射到格式化程序中的年份。例如,您可以让滑块从 0 - 100 运行,然后将最后两个句柄的值映射到 2007 - 2010。然后您可以强制执行 update event 中的任何约束。如果您禁用 step 选项并改为实现 "soft limits",这可能看起来/效果更好。

    • 或者,您可以禁用margin 选项,并在update 事件中使用set 方法自己实现保证金行为。 this Github issue 中有一个很好的例子来说明如何做到这一点。

    【讨论】:

    • 我禁用了边距,并在有效的更新事件中使用 set 方法实现了自定义边距行为。与本机边距实现相比,该方法的一个 缺点是用户能够在更新/设置将其移回有效位置之前将句柄移动到无效位置。我真的不喜欢这个用户体验,它可能会让用户感到困惑。
    • 如果margin(和limit)可以接受一个数字一个函数怎么办?如果传入一个函数,则margin 将设置为 0 用于计算目的,并且该函数将用于确定是否允许移动,如果句柄不能移动则返回 false。这样三就不需要重新设置位置,因为移动从未发生过。想法?
    • 这可能是一个改进。您可以将其归档到项目问题跟踪器上!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多