Restricted navigation within layers and alignment with base layer
I am working on a Storyline 360 file for which I added various navigational restrictions but the one about Scene 6 (6.2, 6.3 and 6.4) is a bit complex and nested and if you could provide some tips to restrict navigation within layers with an alignment with base layer? Or, do you have another idea which can make things easier? I have the independence to completely change the appearance of slides as well. So there is a base layer and various layers when the learner clicks a Chevron button (Section) and technically other layers associated with that Chevron that a learner needs to go through. First, I want learner to click all arrows within the Section to complete that Section. How to check if the smaller arrows are clicked to mark that Section "Done"? The final result is to enable the next button when the learner has clicked all Chevrons (Sections) on the slide (Base layer). Appreciate your support.34Views0likes6CommentsHow do button states stack?
I am making a collection of button templates in the style of my company's branding. In doing so, I want to make full use of the functionality that states in Storyline 360 provide, but am having trouble making sense of them. My issues come from the interactions between states that are active simultaneously on an object. In this case, the Hover, Selected and Visited states. Firstly, here's what I want to do: The button has a Normal state with a medium blue fill and black text. The Hover state should set the fill to a light blue. The Selected state should add 6 px. black outline. The Visited state should set the fill to a dark blue and the text colour to white. My resulting states are shown below as they appear in Storyline. For clarity, I added a text box to each state, to see when each one was active. The expected behaviour is that when, for example, the button is Selected and Visited, it should have the black outline, dark blue fill and white text. The resulting behaviour, however, is that the button has the medium blue fill and black text of the Normal state, plus the black outline of the Selected state, as shown here: At first, I assumed that the Selected state was just overwriting the Visited state completely. However, when I added the text boxes I saw that was not the case, as both words were visible at once. In case only the "edited" parts of each state were overwriting each other, I reset each state and edited only the aspects that differed from the Normal state (in case I had accidentally set the Selected state's fill and text colour to the same colour as the Normal state, and that was overriding the Visited state). Unfortunately this had no effect on the results. Is this expected behaviour? And if so, how exactly do different changes from different states overlap? Is there a way to achieve what I want to do without adding several custom states corresponding to each possible combination? Thank you in advance49Views0likes5CommentsOld Rise link not working anymore
Hello We have had a subscription for Articulate 360, but since our new LMS system we decided not to use it anymore. We did however include a Rise course I created in the new LMS and up until recently it worked fine. Now we get an error message. Because we don't have a paying account anymore I cannot check or create a new link. I was wondering if anyone knows if something has changed in Rise which makes old links to courses not working anymore or if there is a way for me to make it work again? https://www.eshre.eu/ElearningCourse/course1/index.html#/lessons/cj3051k1i00003e64bdv1w08j?_k=3ynyzr This is the link for the course. Thank you! Titia8Views0likes0CommentsTurning SL course into an app
Hello community. Has anyone found a way to convert SL course into an iPhone app or for Andorid? I found this site and wanted to hear from people who tried or have any success. Love to hear your comments. https://forum.volt.build/t/converting-an-articulate-storyline-course-into-an-app/682 Best,49Views0likes1CommentNew attempt with free seekbar but reset quiz
I've created a course and a quiz at the end. The course setting on LMS is with 3 attempts. There are multiple videos on each slide. I've restricted the seek bar until the learner watches till the end of the timeline Nextbutton will not be activated. When I start a new attempt (after completing their first attempt) on the LMS, I would like the learner to be able to freely navigate through the menu and the seekbar. In other words I would all the slides to be in resumed state when the user enters a new attempt but quiz score is reset and they can comfortably take up the quiz. This way they can view what they wish to and learn if they missed out anything necessary to complete the quiz with a passing score. How would I be able to get this? Please assist23Views0likes1CommentQuiz Score not getting updated to the highest score.
I have uploaded a course with a quiz at the end. In my player setting, I've restricted the seek bar until the learner watches till the end of the timeline "Next" button will not be activated. Number of attempts allowed to take the course is 3. My concern is, on any given attempt, let's say 1st attempt, if I fail the quiz and I click retry and on the second quiz attempt I pass, and then fail on the third attempt even so, my score on the LMS is reflecting the failed score (LMS is considering the last attempt before exit). How do I solve this?32Views0likes2CommentsVariable change when user upates an answer?
I'm trying to build a course to help our users count money. I've done all the coding and all the math so everything works EXCEPT if they make a mistake and change a number to correct it. Then it adds the number a second time. What do I need to add so they can correct an answer but not clear everything out? I haven't added the wrong answer part yet, but figured out how to do that. I found they had to reset the whole thing to clear it and start over, otherwise it kept adding the new numbers in.Solved40Views0likes3CommentsGrouped objects as button sets
Hi all, I've read a few articles about how to use grouped objects as button sets, but I cannot get it to work on my project. I'm hoping you all can help! On slide 1.3, I want the users to select a radio button and for the corresponding money stack to change state to green (i.e., When $50,000 is selected, the first stack changes state to green, and so on). I created a button set on the bottom three objects and changed their selected states to change the entire stack. In preview, though, the selected state is covered. What am I doing wrong?Solved28Views0likes5CommentsFormatting background in different scenes
I have a project that I am working on and changed the background on Scene 2 (Module 1) but it changed Scene 1 (Introduction) too. I want to be able to apply a different background to Scene 2 and subsequent scenes. How do I do this? Do I need to do different stories for each module?17Views0likes2CommentsCalling all Articulate JavaScript buffs
Hi I have been trying to get a PDF to download using JavaScript, but I ran into the following errors: 1. ) Failed to load resource: net::ERR_FILE_NOT_FOUND PDFen.pdf:1 2.) Uncaught (in promise) TypeError: Failed to fetch at fillForm (user.js:51:30) at Constructpdf (user.js:39:9) 3.) Uncaught SyntaxError: "undefined" is not valid JSON at JSON.parse (<anonymous>) at e.setAsAdornable (slides.min.js:2:567513) at e.<anonymous> (slides.min.js:2:567170) at Array.forEach (<anonymous>) at e.adornSvg (slides.min.js:2:567145) at e.whenHtmlReady (slides.min.js:2:744345) I would really love some help and guidance (steps potentially) on how to solve these errors! If more information is required, please do not hesitate to ask! Thank you!!! Here is my code: //Retrieve Player Variables const date = new Date(); let day = date.getDate(); let month = date.getMonth() + 1; let year = date.getFullYear(); let currentDate = `${day}-${month}-${year}`; let player = GetPlayer(); //lSlider1 = player.GetVar("Slider1"); var results = [ player.GetVar("Slider1"), player.GetVar("Slider2"), player.GetVar("Slider3"), player.GetVar("Slider4"), player.GetVar("Slider5"), player.GetVar("Slider6"), player.GetVar("Slider7"), player.GetVar("Slider8"), player.GetVar("Slider9"), player.GetVar("Slider10"), player.GetVar("Slider11"), player.GetVar("Slider12"), player.GetVar("Slider13"), player.GetVar("Slider14"), player.GetVar("Slider15"), player.GetVar("Slider16"), player.GetVar("Slider17"), player.GetVar("Slider18"), player.GetVar("Slider19"), player.GetVar("Slider20"), player.GetVar("Slider21"), player.GetVar("Slider22"), player.GetVar("Slider23"), player.GetVar("Slider24"), player.GetVar("Slider25"), player.GetVar("Slider26"), player.GetVar("Slider27"), player.GetVar("Slider28"), player.GetVar("Slider29"), player.GetVar("Slider30"), player.GetVar("Slider31"), ]; var reflect1 = player.GetVar("Reflect1"); var reflect2 = player.GetVar("Reflect2"); var reflect3 = player.GetVar("Reflect3"); var reflect4 = player.GetVar("Reflect4"); Constructpdf(); async function Constructpdf() { //Dynamically load pdf-lib JavaScript module await loadMods(); //Call the fillForm asynch function await fillForm(); } async function loadMods() { await import("https://unpkg.com/pdf-lib/dist/pdf-lib.js"); } async function fillForm() { //Read pdf form const { PDFDocument } = PDFLib; const formUrl = 'PDFen.pdf'; const formPdfBytes = await fetch(formUrl).then (res => res.arrayBuffer()); const pdfDoc = await PDFDocument.load(formPdfBytes); const form = pdfDoc.getForm(); alert ("Helb"); //Get Slider Thumb image const pngUrl = 'thumb.jpg'; const pngImageBytes = await fetch(pngUrl).then((res) => res.arrayBuffer()); const pngImage = await pdfDoc.embedPng(pngImageBytes); //Get field names const dateField = form.getTextField('Date'); const thumbs = [[ form.getButton('Th1'), form.getButton('Th2'), form.getButton('Th3')], [ form.getButton('Th4'), form.getButton('Th5'), form.getButton('Th6')], [ form.getButton('Th7'), form.getButton('Th8'), form.getButton('Th9')], [ form.getButton('Th10'), form.getButton('Th11'), form.getButton('Th12')], [ form.getButton('Th13'), form.getButton('Th14'), form.getButton('Th15')], [ form.getButton('Th16'), form.getButton('Th17'), form.getButton('Th18')], [ form.getButton('Th19'), form.getButton('Th20'), form.getButton('Th21')], [ form.getButton('Th22'), form.getButton('Th23'), form.getButton('Th24')], [ form.getButton('Th25'), form.getButton('Th26'), form.getButton('Th27')], [ form.getButton('Th28'), form.getButton('Th29'), form.getButton('Th30')], [ form.getButton('Th31'), form.getButton('Th32'), form.getButton('Th33')], [ form.getButton('Th34'), form.getButton('Th35'), form.getButton('Th36')], [ form.getButton('Th37'), form.getButton('Th38'), form.getButton('Th39')], [ form.getButton('Th40'), form.getButton('Th41'), form.getButton('Th42')], [ form.getButton('Th43'), form.getButton('Th44'), form.getButton('Th45')], [ form.getButton('Th46'), form.getButton('Th47'), form.getButton('Th48')], [ form.getButton('Th49'), form.getButton('Th50'), form.getButton('Th51')], [ form.getButton('Th52'), form.getButton('Th53'), form.getButton('Th54')], [ form.getButton('Th55'), form.getButton('Th56'), form.getButton('Th57')], [ form.getButton('Th58'), form.getButton('Th59'), form.getButton('Th60')], [ form.getButton('Th61'), form.getButton('Th62'), form.getButton('Th63')], [ form.getButton('Th64'), form.getButton('Th65'), form.getButton('Th66')], [ form.getButton('Th67'), form.getButton('Th68'), form.getButton('Th69')], [ form.getButton('Th70'), form.getButton('Th71'), form.getButton('Th72')], [ form.getButton('Th73'), form.getButton('Th74'), form.getButton('Th75')], [ form.getButton('Th76'), form.getButton('Th77'), form.getButton('Th78')], [ form.getButton('Th79'), form.getButton('Th80'), form.getButton('Th81')], [ form.getButton('Th82'), form.getButton('Th83'), form.getButton('Th84')], [ form.getButton('Th85'), form.getButton('Th86'), form.getButton('Th87')], [ form.getButton('Th88'), form.getButton('Th89'), form.getButton('Th90')], ]; const reflectField1 = form.getTextField('VFactor'); const reflectField2 = form.getTextField('VCompromise'); const reflectField3 = form.getTextField('VNeed'); const reflectField4 = form.getTextField('VMotivate'); //Fill in form dateField.setText(currentDate); console.log(results, reflect1, reflect2, reflect3, reflect4); for(i=0; i<30; i++) { if (results[i] == 1) { thumbs[i][0].setImage(pngImage); } else if (results[i] == 2) { thumbs[i][1].setImage(pngImage); } else if (results[i] == 3) { thumbs[i][2].setImage(pngImage); } } reflectField1.setText(reflect1); reflectField2.setText(reflect2); reflectField3.setText(reflect3); reflectField4.setText(reflect4); //Save form const pdfBytes = await pdfDoc.save(); //Download the form await import('https://unpkg.com/tiny-save-as/dist/tiny-save-as.esm.js') .then(({default: saveAs}) => { const blob = new Blob([pdfBytes], {type: 'application/octet-stream'}); saveAs(blob, "PDFen.pdf"); ; }) .catch((err) => { console.log(err); }); }50Views0likes3Comments