Warning
At this moment two versions of Captivate are functional with the same license: Captivate Classic (version 11.8) and Captivate (version 12, also named Charm). The workflows described in this post are only functional in Captivate Classic. In version 12 they are not (yet) possible for multiple reasons which I will summarize at the end.
Why a ‘Dynamic’ Next button?
Captivate has a playbar which includes a Next (and Back) button, along with a progress bar allowing to scrub to any location.
However in many projects these default buttons nor the scrub bar are unwanted, some examples:
- The project is not linear (presentation-like). This can be due to a dashboard pointing to different parts and allowing the learner to control the sequence of the project slides.
- There are (dummy) slides in the project which you don’t want to have visited by the learner.
- Your client requires Forced viewing (bad idea especially for adult learners).
In those cases you don’t want to have the default buttons which will be available all the time and always cause the action ‘Go to Next Slide’ or ‘Go to Previous Slide’. In all those cases a scrub bar is also a bad idea, but this article has its focus on custom Next and Back buttons. I have seen so many cases where the developer just puts an instance of the custom buttons on each slide – each with their individual action. This post explains two altnernatives using only one instance of the Next button in a project.
Two Workflows
Purpose of both workflows is the same: avoiding to have an instance of the buttons on each slide:
- Workflow 1: Put the Next button on the first slide where you need them, and time the button for the rest of the project, always on top. This will probably be he first slide. The button will have a unique ID. That means that it can be addressed with an action like Show/Hide when necessary. You can hide the Next button if it is no longer needed on the last slide using the On Enter event of the slide. This workflow is to be preferred if you need a lot of Forced viewing. In that case you can hide the Next button (On Enter) and use the Delay Next Actions command to show them after a certain delay or use another interactive object action to make it visible.
- Workflow 2: Put the button on master slides. If it is a non-responsive project you can use the main master slide, for fluid boxes projects you need to use other master slides. The button will not get an ID, but if you keep the Pausing (is activated by default) the pausing point will occur for each slide based on the master slide at the last frame, whatever the slide duration. Due to the lack of ID the button visibility cannot be controlled by actions. This workflow is not suited if you have a lot of Forced viewing. You’ll need a separate master slide without the button for those slides where you don’t need a Next button.
Since the button in both workflows will not always have the action ‘Go to Next Slide’, you’ll need a ‘dynamic’ action to make it flexible.
Dynamic actions
I prefer Shared actions because it is easier to transfer them to any project, using my Shared actions Library. Moreover they can be used as template for an advanced action that needs some editing. That is a Captivate project where I store much used Shared actions. I open the library in any new project using File, Import, External Library.
Next button
The simple action ‘Go to Next Slide’ can also be achieved by this action:
Assign cpCmndGotoSlide with cpInfoCurrentSlide
This may seem weird, but the reason is the different start number of the index: for cpCmndGotoSlide it is 0, for cpInfoCurrentSlide it is 1. Example: if you are on slide 3, the Next button needs to go to slide 4, but for cpCmndGotoSlide that slide is identified by number 3.
You cannot use this action to the Next button, whether it is on the first slide (timed Rest of Project) or on the master slide(s). It is static, you cannot edit it to go to another slide than the Next one. To solve this issue I replaced the system variable by a user variable, which I label v_Next.
Assign cpCmndGotoSlide with v_Next
Another event and action is needed on each slide to define the value of v_Next. The used event is the Slide On Enter, and it is better to use an Advanced action, because it can be applied to all On Enter events of the slides in one workflow. For its default action it will be:
Assign v_Next with cpInfoCurrentSlide
For slides where the Next button needs to jump to a different slide, you’ll need to edit this action, replace ‘cpInfoCurrentSlide’ by the slide number you want to navigate to.
Summary
In my Shared actions Library I have two Shared actions:
NextAct Assign cpCmndGotoSlide with v_Next
EnterAct Assign v_Next with cpInfoCurrentSlide
- In a new project, drag both shared actions to the Project Library of the new project. It is important to drag them at the same time to avoid that the variable v_Next will be created twice.
- Add a Next button with one of the two workflows. Apply the Shared action ‘NextAct’ directly to that button. No parameters are needed.
- Convert the action ‘EnterAct’ to an Advanced action, by using it as template. There are no parameters to be defined. Apply the Advanced action to all Slide Enter events.
- Identify those slides where the Next button needs to navigate to another slide and edit the Advanced action for those slides.
What about Captivate (version 12)
This workflow is impossible due to lack of:
- Master slides
- Timing of objects for rest of project
- Missing system variables from the Movie Control category
- Missing slide Enter event
In that version you need to keep the workflow to insert a button on each slide and add the appropriate action.