0

我正在使用 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});
    }
}

有谁知道这个问题?我会非常感谢任何帮助。

4

2 回答 2

0

我设法自己解决了这个问题,即使 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});
    }
}
于 2020-04-01T13:13:50.547 回答
0

这是另一个解决方案(至少适用于 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});
于 2020-04-01T20:43:20.173 回答