plotly rangeslider 如何确定是不是选择了范围

Posted

技术标签:

【中文标题】plotly rangeslider 如何确定是不是选择了范围【英文标题】:plotly rangeslider how to determine if range is selectedplotly rangeslider 如何确定是否选择了范围 【发布时间】:2017-03-14 03:01:20 【问题描述】:

需要知道何时完成对范围滑块的拖动。添加 'dragend' 上的 sliderDiv 上的事件仅偶尔产生 通知。在 plotly_relayout 上收听太多 事件。

【问题讨论】:

你能添加生成图表和滑块的代码吗? @mei:你对我的回答满意吗?我会对你的完整解决方案感兴趣 @flipperweid,我有一个更老套的解决方案,但它遵循与您类似的逻辑线。 $('#mySliderViewer').on('plotly_relayout', function(event, arguments) var _arg=arguments; var _keys = Object.keys(_arg); var _str=_keys[0]; //window.console.log("relayout for ..",_str); if( _str == "xaxis.range") minmaxAgain(); ); 【参考方案1】:

我认为尚不支持像“plotly_rangeslider_dragend”这样的事件。所以你必须使用一种解决方法。

要确定 rangeslider 事件,您可以使用“plotly_relayout”并查看 eventdata-Object,如下面的代码:

var timer=undefined;
var plotlyRelayoutEventFunction=function(eventdata)
  if( Object.prototype.toString.call(eventdata["xaxis.range"]) === '[object Array]' ) 
    console.log("rangeslider event!!");

    if(timer!==null)
      //timer is running: stop it
      window.clearTimeout(timer);
    

    timer = window.setTimeout(function() 
      //fire end event
      console.log("rangeslider event ENDS");

      //reset timer to undefined
      delete timer;
      timer=undefined;
    , 800);
  

第一个 if 语句检查 eventdata 字段“xaxis.range”是否为数组。如果是,则为范围滑动事件。 (相比之下,缩放事件与此类似,但它不是数组)。

要确定 rangeslider 事件的结束,您可以使用计时器。如果新事件在 800 毫秒的时间范围内出现,则它不是结束并且计时器重新启动。如果 800 毫秒结束,并且 rangeslider-end-event 中没有新事件发生。

当然这不是完整的解决方案,因为用户可以等待 800 毫秒而不释放滑块。因此,您也必须使用一些鼠标事件来构建一个真正正确的 rangeslider-end-event。希望这会引导您朝着正确的方向前进。我认为有很多方法可以解决它。

这里是一个完整的 jsfiddle 示例,基于 plotly 网站示例的rangeslider 并触发一个rangeslider-end-event 到控制台:https://jsfiddle.net/7d03n2k1/

编辑:

我更新了我的代码:https://jsfiddle.net/7d03n2k1/1/ 原因 window.setTimout(...) 返回一个 Id 并且没有对象代码是错误的。

【讨论】:

以上是关于plotly rangeslider 如何确定是不是选择了范围的主要内容,如果未能解决你的问题,请参考以下文章

如何单独引用 RangeSlider 的每个拇指 (ControlsFX)

plot.lm() 如何确定残差与拟合图的异常值?

如何防止在Ion.RangeSlider中单击间隔?

在 Shiny 中使用带有 ion.RangeSlider 滑块输入的日期

无法让 rangeslider.js 工作

新的 ion.RangeSlider 给 Shiny 带来了哪些优势?