2015-06-15 23 views
5

Tôi đã tự hỏi liệu có cách nào thay đổi tốc độ hoạt ảnh của thanh trượt trong sáng bóng hay không. Vì vậy, đối với một thanh trượt đó là (trong ui.R):Thay đổi tốc độ trượt hình ảnh động sáng bóng

sliderInput("test_slider", 
      "Animation:", 
      min = 1, 
      max = 200, 
      value = 100, 
      animate = animationOptions(interval = ANIMATION SPEED)) 

Tôi muốn để có thể thay đổi ANIMATION TỐC ĐỘ hơn là giữ nó ở một giá trị tĩnh mà tôi đặt trong đầu. Ngoài ra, các hình ảnh động chỉ hoạt động khi tôi đặt nó trong ui, vì vậy tôi không thể làm cho nó một giao diện người dùng phản ứng trong máy chủ. Ví dụ, tôi không thể làm trong server.R

output$test_slider <- renderUI({ 
    sliderInput("test_slider", 
       "Animation:", 
       min = 1, 
       max = 200, 
       value = 100, 
       animate = animationOptions(interval = ANIMATION SPEED)) 
}) 

và sau đó thêm vào ui.R

uiOutput("test_slider") 

Đây có thể là lý tưởng kể từ khi tôi tùy chỉnh những thứ như min và max (và có lẽ ANIMATION SPEED), nhưng tiếc là làm theo cách này làm cho nó để nút play không hoạt động và các hình ảnh động chỉ không bắt đầu. Tôi đang thua lỗ về cách tự động thay đổi thông số đầu vào của thanh trượt. Ngay cả khi giải pháp của bạn liên quan đến javascript, tôi sẽ hoàn toàn ổn với điều đó. Cảm ơn bạn rất nhiều.


EDIT:

Vì vậy, tôi không có một câu trả lời nào, nhưng tôi đã nhận được gần hơn. Tôi nhìn qua các tập tin javascript và thêm một cái gì đó như thế này (trong ui.R):

  numericInput("anim", 
         "interval: ", 
         value = 100), 
     sliderInput("test_slider", 
        "Animation", 
        min = 1, 
        max = 200, 
        value = 100, 
        step = 1, 
        animate = animationOptions(interval = 700, 
           playButton = icon('play', "fa-3x"), 
           pauseButton = icon('pause', "fa-3x"))), 
     singleton(
      tags$head(tags$script('Shiny.addCustomMessageHandler("testmessage", 
       function(message) {$(this).attr("data-interval", message.interval); 
           console.log($(this).attr("data-interval"))});')) 
     ) 

Tôi có console.log chỉ để chứng minh rằng tôi đang gửi những điều đúng đắn vì nó được in giá trị chính xác trong thiết bị đầu cuối. Sau đó, tôi làm trong server.R:

observe({ 
    if(!is.null(input$anim)) { 
     session$sendCustomMessage(type = "testmessage", 
           message = list(interval = input$anim, 
             controller = input$test_slider)) 
    } 
    }) 

Tôi đang sử dụng cả các tài liệu trong repo sáng bóng ở đây: https://github.com/rstudio/shiny/blob/a6cd0fdb85d5d2175ebc4fcb590386e4cedcbbd9/srcjs/input_binding_slider.js

cũng như các tài liệu tìm thấy trên blog này ở đây: https://ryouready.wordpress.com/2013/11/20/sending-data-from-client-to-server-and-back-using-shiny/

Một cho repo github tôi đang sử dụng các phần dưới đây, nơi nó nói

animInterval = self.attr("data-interval") 

nơi

var self = $(this) 

Tôi chưa bao giờ thực sự sử dụng javascript trước đây, vì vậy tôi có thể thiếu điều gì đó hiển nhiên. Bất kỳ trợ giúp nào cũng được đánh giá rất cao!

+0

Về lý thuyết bằng cách sử dụng ký hiệu dấu chấm, bạn có thể truy cập các giá trị đầu vào trong ui. Vì vậy, bạn tạo một thanh trượt khác và đặt khoảng thời gian = "input.SLIDERINPUTNAME" Nhưng cho một ngày nào đó tôi không thể làm việc đó. Thông tin thêm truy cập các giá trị đầu vào trong ui: [Bảng điều kiện] (http://shiny.rstudio.com/gallery/conditionalpanel-demo.html) –

+1

Xin cảm ơn sự trợ giúp.Tôi đã đăng nội dung dưới đây dưới dạng "câu trả lời" để có thể xem rõ hơn câu trả lời và nó có thể gần hơn. Nó sử dụng một số javascript, mà tôi không thực sự quen thuộc với, nhưng tôi nghĩ rằng nó nên đã làm việc. Bất kỳ đề xuất? Cảm ơn! – johnny838

+1

Tôi cũng nghĩ rằng renderUI nên làm việc vì vậy có thể nó là lỗi. Bạn có thể viết báo cáo lỗi tại đây: [Vấn đề] (https://github.com/rstudio/shiny/issues) –

Trả lời

1

Tôi không chắc chắn nếu tôi hiểu vấn đề của bạn, nhưng nếu tôi làm những điều sau đây sẽ làm việc:

Trong server.R:

output$slider_to_anim <- renderUI({ 
    sliderInput("slider", 
      "Animation:", 
      min = 1, 
      max = 200, 
      value = 100, 
      animate = animationOptions(interval = input$speed)) 
}) 

output$speed_value <- renderUI({ 
    numericInput("speed","Speed Value :",value = 100) 
}) 

Và thêm vào ui.R:

uiOutpout("slider_to_anim"), 
uiOutpout("speed_value") 
Các vấn đề liên quan