【问题标题】:Changing the visibility of sliders in JSXGraph更改 JSXGraph 中滑块的可见性
【发布时间】:2020-07-12 12:50:05
【问题描述】:

我正在使用 JSXGraph 创建一堆滑块,它们的可见性应该通过一个复选框来更改。不幸的是,setAttribute() 并没有真正起作用。它只改变滑块“头部”的可见性,但不改变其范围。这是我在 javascript 中的代码示例:

ctx.slider_A = ctx.box_left.create("slider", [[50, 50], [230, 50], [0, 0.4, 1]], 
                {withLabel: false, snapWidth: 0.05, fillColor: ctx.textColor, visible: false});

function sliderVisibility(){
    var Checkbox = getElementById("check");
    if (Checkbox.checked == true) {
         ctx.slider_A.setAttribute({visible: true});
    }else{
         ctx.slider_A.setAttribute({visible: false});
    }
}

有人知道这个问题吗?非常感谢您的帮助。

【问题讨论】:

    标签: javascript slider visibility setattribute jsxgraph


    【解决方案1】:

    我自己设法解决了这个问题,尽管 JSXGraph 文档 (https://jsxgraph.uni-bayreuth.de/docs/symbols/Slider.html) 并没有真正帮助我。我错误地假设滑块被视为单个对象,但它实际上由四个部分组成:滑块本身(我之前称为“头部”的东西)、基线、高线和刻度线的基线。如果你想改变整个事物的可见性,你需要为每个组件改变它。

    我不知道是否有更优雅的方法来做到这一点(我很确定有,但对我来说这个解决方案就足够了),但我是这样做的:

    function sliderVisibility(){
        var Checkbox = getElementById("check");
        if (Checkbox.checked == true) {
             ctx.slider_A.setAttribute({visible: true});
             ctx.slider_A.baseline.setAttribute({visible:true});
             ctx.slider_A.highline.setAttribute({visible:true});
             ctx.slider_A.ticks.setAttribute({visible:true});
        }else{
             ctx.slider_A.setAttribute({visible: false});
             ctx.slider_A.baseline.setAttribute({visible:false});
             ctx.slider_A.highline.setAttribute({visible:false});
             ctx.slider_A.ticks.setAttribute({visible:false});
        }
    }
    

    【讨论】:

      【解决方案2】:

      这是另一种解决方案(至少适用于 v1.00+):

          var s1 = board.create('slider', [[-3,1], [2,1],[-10,1,10]], {
                  name: 'A',
                  visible: true,
                  baseline: {visible: 'inherit'},
                  highline: {visible: 'inherit'},
                  label: {visible: 'inherit'}
              });
      

      然后,应该可以使用

      进行切换
          s1.setAttribute({visible: false});
      

      【讨论】: