所以,一旦滚动一定距离,我就一直在努力向我的 R Shiny 应用程序添加一个条件。经过大量调试后,我至少意识到一个最初的问题阻碍了我的前进。 JavaScript 中的逻辑运算符不起作用。下面是一个不完整的玩具示例,但希望您不需要一个工作示例来弄清楚发生了什么。
shinyUI(fluidPage(
...
tags$body(
...
tags$script('
window.onscroll = function() {myFunction()};
function myFunction() {
var x = 5;
var y = 3;
if(y < x){
sidebar.classList.add("stickyTop");
}
}')
)))
如果我删除 if 部分,则一旦我滚动,就会添加“stickyTop”特征。离开,if 语句中看似明显正确的语句,不会激活“stickyTop”。使用其他变量、将它们移到函数之外或我尝试过的任何其他方法都不起作用。
使用 if(1) 有效,if(true) 也有效,if(0<1) 无效。我做错了什么?
对于那些好奇的人,我的“stickyTop”是在我的 css 文件中定义的:
.stickyTop {
position: fixed;
top: 0;
height: 100vh;
}
更长的代码(不太有效的 MWE,很难削减我的代码,随机包含另一个 MWE 的一部分):
library(shiny)
ui <- (fluidPage(fluidRow(
id = "title",
column(
8,
titlePanel(
title = div(strong("Stuff"),
style = "color:black;"),
windowTitle = "Mores tuff"
),
p("Last updated on June 22, 2018", id = "id_updated_time"),
br()
)#,),
tags$body(sidebarLayout(
sidebarPanel(
id = "sidebar",
actionButton("evReactiveButton", "eventReactive"),
br(),
actionButton("obsEventButton", "observeEvent"),
br(),
actionButton("evReactiveButton2", "eventReactive2")
),
mainPanel(#style="position:sticky;",
verbatimTextOutput("eText"),
verbatimTextOutput("oText")),
tags$script(
'
window.onscroll = function() {myFunction()};
function myFunction() {
var x = 5;
var y = 3;
if(1){
sidebar.position.fixed;
}
}'
)
) # Close sidebarLayout
) # Close tags$body
)))
server <- function(input, output) {
etext <- eventReactive(input$evReactiveButton, {
runif(1)
})
observeEvent(input$obsEventButton, {
output$oText <- renderText({
runif(1)
})
})
eventReactive(input$evReactiveButton2, {
print("Will not print")
output$oText <- renderText({
runif(1)
})
})
output$eText <- renderText({
etext()
})
}
shinyApp(ui = ui, server = server)
最佳答案
您好,您需要将 JavaScript 放入 einem HTML
标记中。
tags$script(HTML(
'
function myFunction() {
var x = 5;
var y = 3;
if(y < x){
$("#sidebar").css({
"position": "fixed",
"top": "0",
"height": "100vh",
});
}
}
window.onscroll = function() {myFunction()};'
))
希望这有帮助!!
关于Javascript逻辑运算符在R Shiny 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50996717/