Изменение видимости слайдеров в JSXGraph - PullRequest
0 голосов
/ 31 марта 2020

Я использую 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});
    }
}

Кто-нибудь знает проблему? Я был бы очень благодарен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Вот еще одно решение (которое работает по крайней мере с 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});
0 голосов
/ 01 апреля 2020

Мне удалось решить это самому, хотя 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});
    }
}
...