h.l*_*l.m 7 javascript r shiny htmlwidgets
slickjavascript库(http://kenwheeler.github.io/slick/)给我留下了深刻的印象,并希望将它整合到我的闪亮应用程序/软件页面中.
我想htmlwidgets在R中使用包含slick js库的软件包,所以已经开始尝试创建一个软件包,如在线文档(http://www.htmlwidgets.org/develop_intro.html)中所建议的那样,通过执行下列...
devtools::create("slick")
setwd("slick")
htmlwidgets::scaffoldWidget("slick")
Run Code Online (Sandbox Code Playgroud)
我从https://github.com/kenwheeler/slick/archive/1.6.0.zip下载了js库
并将其放入包的结构中,以便我有一个看起来有点像这样的文件结构.
R/
| slick.R
inst/
|-- htmlwidgets/
| |-- slick.js
| |-- slick.yaml
| |-- lib/
| | |-- slick-1.6.0/
| | | |-- slick/
| | | | |-- slick.min.js
| | | | |-- slick.js
| | | | |-- slick.css
| | | | |-- slick-theme.css
Run Code Online (Sandbox Code Playgroud)
我的slick.yaml文件看起来像这样......
dependencies:
- name: slick
version: 1.6.0
src: htmlwidgets/lib/slick-1.6.0
script:
- slick/slick.min.js
- slick/slick.js
stylesheet:
- slick/slick.css
- slick/slick-theme.css
Run Code Online (Sandbox Code Playgroud)
但我真的很困惑如何调整inst/htmlwidget/slick.js文件和R/slick.R文件的方式可以采取网址的矢量,并在闪亮的应用程序中显示它们.原因在于,它似乎与提供的示例不匹配类似的输入数据概念.
为了重现性并使用包中示例中提供的相同URL,我提供了一个占位符img url的向量,我想将其用作内容.对于旋转木马中的每个图像.
image_vec <- paste0("http://placehold.it/350x300?text=",seq(1:9))
Run Code Online (Sandbox Code Playgroud)
也许我可能需要使用这样的东西?...
lapply(image_vec,function(y){div(img(src=y))})
Run Code Online (Sandbox Code Playgroud)
一如既往,对此的任何帮助都将非常感激.
编辑
我的新slick.yaml文件如下所示......在@ NicE的回复帖后...我错过了什么?
dependencies:
- name: jquery
version: 3.1.0
src: htmlwidgets/lib
script:
- jquery-3.1.0.min.js
- name: slick
version: 1.6.0
src: htmlwidgets/lib/slick-1.6.0
script:
- slick/slick.min.js
- slick/slick.js
stylesheet:
- slick/slick.css
- slick/slick-theme.css
Run Code Online (Sandbox Code Playgroud)
现在我的文件结构如下所示:
R/
| slick.R
inst/
|-- htmlwidgets/
| |-- slick.js
| |-- slick.yaml
| |-- lib/
| | |-- jquery-3.1.0.min.js
| | |-- slick-1.6.0/
| | | |-- slick/
| | | | |-- slick.min.js
| | | | |-- slick.js
| | | | |-- slick.css
| | | | |-- slick-theme.css
Run Code Online (Sandbox Code Playgroud)
我/inst/htmlwidgets/slick.js看起来如下
HTMLWidgets.widget({
name: 'slick',
type: 'output',
factory: function(el, width, height) {
// TODO: define shared variables for this instance
// create new slick object witht the given id?
var sl = new slick(el.id);
return {
renderValue: function(x) {
//add class to the div and center it
el.setAttribute("class",x.class);
el.style.margin = "auto";
//add images to the div
content='';
for(var image in x.message)
{
content += '<div><img src="' + x.message[image] + '"/></div>';
}
el.innerHTML = content;
//initialize the slider.
$(document).ready(function(){
$("."+x.class).slick(x.options);
});
},
resize: function(width, height) {
// TODO: code to re-render the widget with a new size
}
};
}
});
Run Code Online (Sandbox Code Playgroud)
这是一个尝试,使用htmlwidgets_0.6:
对于依赖项,yaml文件看起来相同,我只是在上面添加了 jQuery slick:
dependencies:
- name: jquery
version: 3.1.0
src: htmlwidgets/lib
script:
- jquery-3.1.0.min.js
- name: slick ...
Run Code Online (Sandbox Code Playgroud)
您可以在这里获取它并将其放入lib文件夹中。
在该slick.R文件中,您需要更改函数的参数slick以添加选项,并将所有参数更改x为将所有参数转发给 JS 代码:
slick <- function(message, class="slick_slider", options = list(), width = NULL, height = NULL) {
# forward options using x
x = list(
message = message,
class = class,
options = options
)
...
Run Code Online (Sandbox Code Playgroud)
在 中slick.js,您主要需要更改renderValue来添加图像/内容div并显示轮播:
renderValue: function(x) {
//add class to the div and center it
el.setAttribute("class",x.class)
el.style.margin = "auto";
//add images to the div
content='';
for(var image in x.message)
{
content += '<div><img src="' + x.message[image] + '"/></div>';
}
el.innerHTML = content;
//initialize the slider.
$(document).ready(function(){
$("."+x.class).slick(x.options);
});
}
Run Code Online (Sandbox Code Playgroud)
使用安装后devtools::install(),您可以在应用程序中使用它shiny:
library(shiny)
library(htmlwidgets)
library(slick)
server <- function(input, output) {
output$test_slick <- renderSlick({
slick(paste0("http://placehold.it/350x300?text=",1:9),
options=list(dots=TRUE,autoplay=TRUE))
})
}
ui <- fluidPage(
tags$style(HTML("body {background-color: #2682d5}")),
slickOutput('test_slick',width="350px",height="300px")
)
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |