2015-06-15 3 views
5

मैं सोच रहा था कि चमकदार में स्लाइडर की एनीमेशन गति को बदलने का कोई तरीका है या नहीं। तो, एक स्लाइडर है कि (ui.R में) के लिए:चमकदार बदलते स्लाइडर एनिमेशन गति

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

मैं इसे एक स्थिर मूल्य है कि मैं शुरुआत में सेट पर रखने से एनिमेशन गति बदलने के लिए नहीं बल्कि सक्षम होना चाहते हैं। साथ ही, एनीमेशन केवल तब काम करता है जब मैं इसे UI में डालता हूं, इसलिए मैं इसे सर्वर में एक प्रतिक्रियाशील यूआई नहीं बना सकता। उदाहरण के लिए, मैं server.R

में ऐसा नहीं कर सकते
output$test_slider <- renderUI({ 
    sliderInput("test_slider", 
       "Animation:", 
       min = 1, 
       max = 200, 
       value = 100, 
       animate = animationOptions(interval = ANIMATION SPEED)) 
}) 

और फिर

uiOutput("test_slider") 

ui.R

में जोड़ने यह आदर्श रहे हैं के बाद से मैं न्यूनतम और अधिकतम (और शायद जैसी चीज़ों को कस्टमाइज़ हैं एनीमेशन स्पीड), लेकिन दुर्भाग्यवश ऐसा करने से ऐसा होता है इसलिए प्ले बटन काम नहीं करता है और एनीमेशन बस शुरू नहीं होता है। स्लाइडर इनपुट पैरामीटर को गतिशील रूप से बदलने के लिए मुझे नुकसान हुआ है। यहां तक ​​कि यदि आपके समाधान में जावास्क्रिप्ट शामिल है, तो भी मैं इसके साथ पूरी तरह से ठीक हूं। बहुत बहुत धन्यवाद।


संपादित करें:

तो मैं एक जवाब अभी तक नहीं है, लेकिन मैं करीब मिल गया है। मैं जावास्क्रिप्ट फ़ाइल के माध्यम से देखा और कुछ इस तरह (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"))});')) 
     ) 

मैं सिर्फ दिखाने के लिए कि मैं सही काम भेज रहा हूँ उस में सही मान प्रिंट कर रहा है के बाद से console.log है टर्मिनल। तब मैं server.R में कार्य करें: https://github.com/rstudio/shiny/blob/a6cd0fdb85d5d2175ebc4fcb590386e4cedcbbd9/srcjs/input_binding_slider.js

के साथ-साथ प्रलेखन इस ब्लॉग यहाँ पर पाया: https://ryouready.wordpress.com/2013/11/20/sending-data-from-client-to-server-and-back-using-shiny/

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

मैं दोनों चमकदार रेपो यहाँ प्रलेखन का उपयोग कर रहा जिथब रेपो के लिए मैं नीचे दिए गए हिस्से का उपयोग कर रहा हूं जहां यह कहता है कि

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

जहां

var self = $(this) 

मैंने पहले कभी जावास्क्रिप्ट का उपयोग नहीं किया है, इसलिए मुझे कुछ स्पष्ट याद आ रही है। कोई भी मदद बहुत ही सराहनीय होगी!

+0

सिद्धांत में डॉट नोटेशन का उपयोग करके आप ui में इनपुट मानों तक पहुंच सकते हैं। तो आप एक और स्लाइडर बनाते हैं और अंतराल = "input.SLIDERINPUTNAME" डालते हैं लेकिन कुछ सत्र के लिए मुझे वह काम नहीं मिल सका। Ui: [सशर्त पैनल] (http://shiny.rstudio.com/gallery/conditionalpanel-demo.html) –

+1

में इनपुट मानों तक पहुंचने वाली अधिक जानकारी सहायता के लिए धन्यवाद।मैंने नीचे "उत्तर" के रूप में कुछ पोस्ट किया है, इसलिए इसे और अधिक स्पष्ट रूप से देखा जा सकता है, और यह करीब हो सकता है। यह कुछ जावास्क्रिप्ट का उपयोग कर रहा है, जिसे मैं वास्तव में परिचित नहीं हूं, लेकिन मैंने सोचा कि इसे काम करना चाहिए था। कोई सुझाव? धन्यवाद! – johnny838

+1

मुझे यह भी लगता है कि रेंडरयूआई को काम करना चाहिए ताकि यह बग हो। आप यहां बग रिपोर्ट लिख सकते हैं: [मुद्दे] (https://github.com/rstudio/shiny/issues) –

उत्तर

1

मुझे यकीन है कि अगर मैं आपकी समस्या समझ में नहीं कर रहा हूँ, लेकिन अगर मैं ऐसा निम्नलिखित काम करेगा:

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) 
}) 

और ui.R में जोड़ें:

uiOutpout("slider_to_anim"), 
uiOutpout("speed_value") 
संबंधित मुद्दे