使用shinyBS时如何用图标替换bsButton组件?
替换shinyBS示例中的按钮为小图标并实现可格式化悬浮提示(Popover)
你可以利用shinyBS的popify/tipify函数支持任意HTML元素的特性,用文本图标或自定义图片替换原示例中的bsButton,实现悬停显示可格式化的悬浮提示。以下是具体实现:
实现代码(文本图标版)
library(shiny) library(shinyBS) app = shinyApp( ui = fluidPage( sidebarLayout( sidebarPanel( sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30), bsTooltip("bins", "The wait times will be broken into this many equally spaced bins", "right", options = list(container = "body")) ), mainPanel( plotOutput("distPlot"), uiOutput("uiExample") ) ) ), server = function(input, output, session) { output$distPlot <- renderPlot({ x <- faithful[, 2] bins <- seq(min(x), max(x), length.out = input$bins + 1) hist(x, breaks = bins, col = 'darkgray', border = 'white') }) output$uiExample <- renderUI({ tags$span( # 用"i"文本图标替换原大按钮,支持HTML格式的popover内容 popify( tags$span("i", style = "font-weight:bold; color:#007bff; cursor:pointer; font-size:18px; margin-right:15px"), "提示标题", "这是<b>加粗</b>的内容,也支持<em>斜体</em>和<br>换行等HTML格式!" ), # 用"?"文本图标替换原小按钮 tipify( tags$span("?", style = "font-weight:bold; color:#dc3545; cursor:pointer; font-size:16px"), "这是简洁的tooltip提示" ) ) }) addPopover(session, "distPlot", "Data", content = paste0("<p>Waiting time between ", "eruptions and the duration of the eruption for the Old Faithful geyser ", "in Yellowstone National Park, Wyoming, USA.</p><p>Azzalini, A. and ", "Bowman, A. W. (1990). A look at some data on the Old Faithful geyser. ", "Applied Statistics 39, 357-365.</p>"), trigger = 'click') } ) runApp(app)
自定义图片图标实现
如果想用图片作为触发图标,只需将tags$span替换为tags$img,并将图片文件放在Shiny项目的www文件夹下:
# 替换uiExample中的对应部分 popify( tags$img(src = "question-mark.png", style = "width:18px; height:18px; cursor:pointer; margin-right:15px"), "图片触发提示", "这是图片触发的<b>可格式化</b>悬浮提示内容" )
核心要点
popify默认触发方式为hover,如需点击触发可添加参数trigger = "click"- 通过
style参数可自定义图标的大小、颜色、鼠标指针样式,让图标更符合提示功能的视觉预期 - Popover内容支持完整HTML语法,完美解决tooltip文本过小、无法格式化的问题
内容的提问来源于stack exchange,提问作者Village.Idyot
相关产品推荐
相关产品推荐

