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

plotly rangeslider how to determine if range is selected

需要知道在 rangeslider 上拖动完成的时间。添加 'dragend' 上的 sliderDiv 事件仅偶尔产生 通知。收听 plotly_relayout 给出了太多 事件。

我认为尚不支持 "plotly_rangeslider_dragend" 之类的活动。所以你必须使用一个解决方法。

要确定 rangeslider 事件,您可以使用 "plotly_relayout" 并像下面的代码一样查看事件数据对象:

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 语句检查事件数据字段 "xaxis.range" 是否为数组。如果是,则为 rangeslider 事件。 (相比之下,缩放事件与此类似,但它不是数组)。

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

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

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

编辑:

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