Requiring all slides to be visited, and for a minimum time

I'm wondering if anyone out there can provide some feedback on a potential option I've developed for this.

One of my courses is equivalent to Defensive Driving, but for cyclists. We need to be able to prevent people from accessing the quiz without viewing/interacting with all of the content, and to have them at least stay on each slide long enough to read the content. (In reference to this thread.)

I know there's a lot of controversy surrounding mandatory times for a course. However, some people try to click through to the quiz without even reading the content. That's not kosher. I've let people know in the introduction that they need to spend a reasonable amount of time on the course, and view all of the content.

Most participants spend a fair bit of time on all of the modules--long enough to absorb the content. I want to make sure they can bounce from one slide to another without having to wait for the timeline to complete (it's free navigation). I also don't want to have a message popping up on each slide saying "wait, you're not done!" if someone tries clicking 'Next' before the required time. That would annoy the heck out of me. I also don't want something indicating "that's enough, you can move on" when a 'reasonable' time has elapsed. I only wanted these to show up if they tried accessing the quiz and hadn't completed each slide.

My solution with Storyline was to create:

  1. A 'Continue to the quiz' slide with the link to the quiz on a hidden layer. That layer is only shown when all slides are 'true'.
  2. An off-screen marker on each content slide with a reasonable timeline (about half of the time required for the narration, to accommodate very fast readers), triggered to adjust the variable of the slide to 'true' on completion.
  3. One layer on each content slide for viewed (checkmark) and one for incomplete (X). The appropriate layer is shown when revisiting each slide, only once the learner has reached the 'Continue to the quiz' slide. To show the status of the slide in real time on revisiting, a subsequent trigger was added to display the 'viewed' layer once the timeline was complete. This way, the impatient ones would know they could move along now if they're in a hurry.

On the content slides:

On the 'Continue to the quiz' slide:

I've attached a copy of the sample file.

What are your thoughts on this approach, and can you see any way to simplifying recreating these images and triggers, perhaps using layers in a feedback master layout? I haven't been able to find a way to do the latter--it's important I be able to apply these changes to the 150 or so pages of existing content.

Thanks for any feedback you can provide, and I hope this might help others who have been trying to accomplish something similar.


4 Replies
Kevin Thorn

Hey Allan,

I'm in the camp that doesn't like restricted navigation. Understanding that sometimes it's required, but good design is about the experience allowing learners to discover the content on their own. That's for another discussion.

You've got the logic setup, but there's an overkill in the use of triggers and layers. I took your .story file and streamlined a bit not only for the maintenance of the file, but also for the efficiency of building out a project that will potentially have 150 pages.

Here's the setup:

  • First, I stripped all layers and triggers from the master slide. There may be another approach, but for the time being we'll just stick to content slides.
  • Deleted the "ContinueToQuiz" variable because it wasn't being fired off until  you actually got to the quiz. Really don't need it.
  • Created a new number variable called "TotalSlides" with an initial value of 0. We'll use this variable to evaluate whether or not the Begin Quiz layer will show or not.
  • Variable for each slide. You already have a T/F variable Slide1 and Slide2 so they're in use. As you add more slides, just add a new T/F variable for each one.

The trick is when to to fire the Slide# variables. The small rectangle shape you had on the Master I moved to the content slide and named it "SlideComplete." Not sure how much time you're wanting to set to indicate the appropriate amount of time so I set the total length of the slide's timeline to 10 seconds. Note: I placed a listener on the slide so you can see when the variable fires at 5 seconds.

The "SlideComplete" object is off the slide but not set to appear on the timeline until 5 seconds in. This 5 seconds is our 'marker' to determine if the slide has been visited for at least that amount of time. You can adjust it as you see fit. When the timeline reaches 5 seconds, Storyline will recognize its state as "Normal" at that point and not before.

Next, the green check marker and red x marker I moved to the base slide and deleted their respective layers. Set both markers as Hidden for their initial state. 

When a slide loads, here's what happens. 


  1. Set "TotalSlides' to 1 (first slide) when SldieComplete = Normal. {This indicates this slide was viewed the minimum time that we'll use later when we get to the quiz).
  2. Set Slide1 to True when SlideComplete = Normal (This will show the green marker if the slide was viewed the minimum time).
  3. Change the State of the Slide Viewed marker (green check) to Normal (remember its set to Hidden initially) when Slide1 = True
  4. Change the State of the Incomplete marker (red x) to Hidden when Slide1 = True. {This ensures only one or the other is visible at a time.


  1. Change the State of the Incomplete marker to Normal when the user clicks the Next button IF Slide1 is not equal to True. (this counter evaluates #4 above)
  2. Jump to Next slide when the user clicks the Next button

When you run this and click before 5 seconds you'll advance as normal. However, if you keep going you'll get the alert message you have at the Quiz that says you've not viewed the slides long enough. Since these variables are now set and you navigate back, the red x will be shown on those slides *until* it runs at least 5 seconds. To ensure the sldies don't start over each time I set them to resume saved state but you may have to set them back to initial state depending on how you what backward navigation to work.

Alternatively, if you do stay on a slide for at least 5 seconds you'll see the green check appear. Note the variable listener at the top of the screen as the slide starts - shows "false" and at 5 seconds changes to "true" and the green check appears. When you get the quiz, the Begin Quiz layer will now appear due to the variable trigger evaluations we've done up to this point.

I believe this is more efficient as previous triggers you had. One trigger was evaluating if Slide1 AND Slide2 were True. And it worked fine like you had it. But thinking through the logic as the project grows, I'm not sure how many "ANDs" you can have on a single trigger. Pretty sure you won't be able to have 150.  

This method is similar but we're adding a value to TotalSlides based on the evaluation of the individual slide variables being True or not. This way there's only one variable to evaluate when you get the quiz - TotalSlides. That said, there's only one layer trigger on the opening quiz slide that evaluates TotalSlides to equal to the total number of actual slides. If that number is met, show the Begin Quiz layer.

Everything is in place now so all you have to do is copy and paste these slides as you build out content. You can change the master layout if needed and it won't affect the triggers. Just add a new T/F variable for Slide3, Slide4, and so on and adjust the triggers accordingly. 

In summary, I'm fairly certain there are more ways to do this but this is the first approach that came to mind. It should work just fine.

Hope I interpreted it like you requested. Let me know if it's not working or you have other challenges. (.story file attached)


Allan Dunlop

Wow, thanks for this, Kevin! I really appreciate the time you put into helping refine the approach.

I've been going back & forth between the two files comparing them, and will get back to you as soon as I can with more details.

Kevin: I'm in the camp that doesn't like restricted navigation. Understanding that sometimes it's required, but good design is about the experience allowing learners to discover the content on their own. That's for another discussion.

That's why I've kept the navigation free on the courses. I'm sure there are a lot of people like to be able to explore different parts of the course before settling in, and especially being able to jump here and there after finishing.

Requiring that the content be viewed is an important element in these courses. For a regular course where someone is coming to me to learn more about riding in traffic, the interest and motivation is already there. Most people who take the ticket dismissal course (likely the same with defensive driving) are there not because they want to be, but just to get their fine waived and keep the offense off their driving record. I suspect that's the same for a lot of people who take a course required for their employment.

Fortunately, most find that the course actually is interesting and does provide knowledge they didn't have before. A few wouldn't even stick around long enough to find out if they weren't required to :)

Allan: I also don't want something indicating "that's enough, you can move on" when a 'reasonable' time has elapsed. I only wanted these to show up if they tried accessing the quiz and hadn't completed each slide.

That's something I had in my clunky version that I'll need to add in to yours. I'll let everyone know if I can come up with something that works cleanly.

Thanks again, Kevin. You've given me a much simpler set of tools to work with.