DT 包:styleColorbar() 不适用于 Android 平板电脑
DT package: styleColorbar() not working on Android tablets
我开发了一个 R shiny
应用程序,使用优秀的 DT
包来处理数据 table。 table 之一使用 styleColorbar
辅助函数,它在 table 单元格中生成与每个单元格的值成比例的彩色条。
这在 Chrome 和 Windows 中的 Firefox 运行 中工作得很好,但是当 Chrome 中的 运行 或Sony Experia Android tablet 上的本机浏览器。
此处的演示网页也是如此:https://rstudio.github.io/DT/functions.html。
所以我不认为这是我使用代码的特定问题。
该函数基本上是一个 JS 包装器...而我对 JS 的知识恰好为零
styleColorBar = function(data, color, angle=90) {
rg = range(data, na.rm = TRUE, finite = TRUE)
r1 = rg[1]; r2 = rg[2]; r = r2 - r1
JS(sprintf(
"isNaN(parseFloat(value)) || value <= %s ? '' : 'linear-gradient(%sdeg, transparent ' + (%s - value)/%s * 100 + '%%, %s ' + (%s - value)/%s * 100 + '%%)'",
r1, angle, r2, r, color, r2, r
))
}
我在以下上下文中使用它:
dat = DT::datatable(diversity,
options = list(
scrollX = TRUE,
scrollY = 400,
autoWidth = TRUE,
columnDefs = list(
list(visible = FALSE, targets = hidden)
)
),
style = "bootstrap",
class = "table-striped table-compact",
extensions = c("FixedColumns"),
)
%>%
formatStyle(
c(1),
background = styleColorBar(c(0,diversity[,1]), 'olivedrab'),
backgroundSize = '99% 90%',
backgroundRepeat = 'no-repeat',
backgroundPosition = 'center'
)
任何人都可以提出在 Android 平台上可能出现的问题和解决方法吗?
编辑:
我相信这可能是线性渐变语法的问题,它与 Android 的早期版本存在兼容性问题。但是,我在 Android 4.1 tablet 上对其进行了测试,所以不确定是什么问题。
我在 Github 上提出了同样的问题,yihui 的回复可以在这里找到:https://github.com/rstudio/DT/issues/222。他认为使用 -webkit-
可以解决该问题。其他在线信息还表明这应该适用于较旧的 Android 系统。我会 post 他的代码在这里帮助别人:
styleColorBar2 = function(...) {
sub('linear-gradient', '-webkit-linear-gradient', styleColorBar(...))
}
我不确定如何从 R 中检测系统上 运行 的 Android 版本,但这是一个单独的问题。
我开发了一个 R shiny
应用程序,使用优秀的 DT
包来处理数据 table。 table 之一使用 styleColorbar
辅助函数,它在 table 单元格中生成与每个单元格的值成比例的彩色条。
这在 Chrome 和 Windows 中的 Firefox 运行 中工作得很好,但是当 Chrome 中的 运行 或Sony Experia Android tablet 上的本机浏览器。
此处的演示网页也是如此:https://rstudio.github.io/DT/functions.html。 所以我不认为这是我使用代码的特定问题。
该函数基本上是一个 JS 包装器...而我对 JS 的知识恰好为零
styleColorBar = function(data, color, angle=90) {
rg = range(data, na.rm = TRUE, finite = TRUE)
r1 = rg[1]; r2 = rg[2]; r = r2 - r1
JS(sprintf(
"isNaN(parseFloat(value)) || value <= %s ? '' : 'linear-gradient(%sdeg, transparent ' + (%s - value)/%s * 100 + '%%, %s ' + (%s - value)/%s * 100 + '%%)'",
r1, angle, r2, r, color, r2, r
))
}
我在以下上下文中使用它:
dat = DT::datatable(diversity,
options = list(
scrollX = TRUE,
scrollY = 400,
autoWidth = TRUE,
columnDefs = list(
list(visible = FALSE, targets = hidden)
)
),
style = "bootstrap",
class = "table-striped table-compact",
extensions = c("FixedColumns"),
)
%>%
formatStyle(
c(1),
background = styleColorBar(c(0,diversity[,1]), 'olivedrab'),
backgroundSize = '99% 90%',
backgroundRepeat = 'no-repeat',
backgroundPosition = 'center'
)
任何人都可以提出在 Android 平台上可能出现的问题和解决方法吗?
编辑: 我相信这可能是线性渐变语法的问题,它与 Android 的早期版本存在兼容性问题。但是,我在 Android 4.1 tablet 上对其进行了测试,所以不确定是什么问题。
我在 Github 上提出了同样的问题,yihui 的回复可以在这里找到:https://github.com/rstudio/DT/issues/222。他认为使用 -webkit-
可以解决该问题。其他在线信息还表明这应该适用于较旧的 Android 系统。我会 post 他的代码在这里帮助别人:
styleColorBar2 = function(...) {
sub('linear-gradient', '-webkit-linear-gradient', styleColorBar(...))
}
我不确定如何从 R 中检测系统上 运行 的 Android 版本,但这是一个单独的问题。