R抑制sliderInput的滑块手柄,直到单击为止
我试图在一个闪亮的应用程序中制作一个简单的视觉模拟比例。这些类型的刻度是简单的滑块,不向用户提供任何信息,以避免偏差响应(无刻度,无标签)。我设法得到了想要的结果,除了一个:隐藏滑块的手柄,直到用户单击滑块。我知道我可以通过使用R抑制sliderInput的滑块手柄,直到单击为止,r,shiny,slider,R,Shiny,Slider,我试图在一个闪亮的应用程序中制作一个简单的视觉模拟比例。这些类型的刻度是简单的滑块,不向用户提供任何信息,以避免偏差响应(无刻度,无标签)。我设法得到了想要的结果,除了一个:隐藏滑块的手柄,直到用户单击滑块。我知道我可以通过使用.irs slider{display:none;}隐藏句柄,但我希望它在用户单击滑块时显示,并在用户单击的点(在值处)显示 这是我到现在为止写的: library(shiny) server <-function(input, output) { outp
.irs slider{display:none;}
隐藏句柄,但我希望它在用户单击滑块时显示,并在用户单击的点(在值处)显示
这是我到现在为止写的:
library(shiny)
server <-function(input, output) {
output$value <- renderPrint({ input$slider1 })
}
ui <- fixedPage(
tags$style(type = "text/css", "
.irs-bar {display: none;}
.slidecontainer { width: 100%; }
.irs-bar-edge {display: none;}
.irs-grid-pol {display: none;}
.irs-slider {width: 10px; height: 20px; top: 20px;}
.irs-from, .irs-to, .irs-min, .irs-max { visibility: hidden !important; }
.irs-single {visibility: hidden !important; }
"),
titlePanel("Title"),
br(),
h4("Please respond"),
fluidRow(
column(12, align="center",
sliderInput(
inputId = "slider1",
label = h3("Slider"),
min=0, max=100, value=50,
ticks=FALSE,
width="100%"
)
)
),
br(),
fluidRow(
column(4, verbatimTextOutput("value"))
)
)
shinyApp(ui, server)
库(闪亮)
服务器这里是一个使用shinyjs
包的解决方案,它提供了向应用程序添加javascript代码的功能
我已经在css块中添加了.irs-slider.single{opacity:0;}
,以便在页面加载时使句柄透明。js代码位于服务器部分的runjs
中,当单击.irs
div时,它使用jquery将句柄不透明度更改为1;如果你想的话,你可以把它变成一个更具体的页面元素,但是.irs line
似乎不适合我
您还需要在UI中的某个位置添加useShinyjs()
library(shiny); library(shinyjs)
server <-function(input, output) {
output$value <- renderPrint({ input$slider1 })
runjs("$( '.irs').click(function(){$('.irs-slider.single').css('opacity', 1)})")
}
ui <- fixedPage(
tags$style(type = "text/css", "
.irs-bar {display: none;}
.irs-slider.single { opacity: 0;}
.slidecontainer { width: 100%; }
.irs-bar-edge {display: none;}
.irs-grid-pol {display: none;}
.irs-slider {width: 10px; height: 20px; top: 20px;}
.irs-from, .irs-to, .irs-min, .irs-max { visibility: hidden !important; }
.irs-single {visibility: hidden !important; }
"),
useShinyjs(),
titlePanel("Title"),
br(),
h4("Please respond"),
fluidRow(
column(12, align="center",
sliderInput(
inputId = "slider1",
label = h3("Slider"),
min=0, max=100, value=50,
ticks=FALSE,
width="100%"
)
)
),
br(),
fluidRow(
column(4, verbatimTextOutput("value"))
)
)
shinyApp(ui, server)
库(闪亮);图书馆(shinyjs)
谢谢。对我来说,它需要2次点击-第一次点击irs使不透明度变为1,你需要另一次才能真正看到手柄。然后,我按照您的建议更改了runjs($('.irs行')。单击(function(){$('.irs slider.single').css('opacity',1'))
,现在它完全按照预期工作。我很好奇为什么它对你不起作用。不过,非常感谢。