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 use Custom Navigation?
Captivate has a playbar which includes Next and Back buttons, and a progress bar allowing to scrub to any location.
However in many projects these default buttons are not wanted, 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 - but I will propose altnernatives.
Purpose of both workflows is the same: avoiding to have an instance of the buttons on each slide:
- Workflow 1: Put the buttons on the first slide where you need them, and time them for the rest of the project, always on top. For the Next button this will be on the first slide, for the Back button on the second slide. The buttons will have a unique ID. That means that they 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.
Workflow 2: Put the buttons on master slides. They 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. These buttons cannot be controlled by actions like Show/Hide.
Since the buttons in both workflows will not always be used with 'Go to Next Slide' or 'Go to Previous Slide', you'll need a 'dynamic' action to make them flexible.
I prefer Shared actions because it is easier to transfer them to any project, using my Shared actions Library. 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.
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, Next button should go to slide 4, but for cpCmndGotoSlide slide 4 is identified by number 3.
Howeveer 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..
The simple action 'Go to Previous Slide' can be replaced by this Expression:
Expression cpCmndGotoSlide = cpInfoCurrentSlide - 2
Why 2? For the same reason as explained for the Next button, due to the difference in index for both system variables. To make this action dynamic, we'll need another user variable which I'll label v_Back. Similar to the workflow for the Next button, the value of this variable will be set with an action On Enter for each slide. For a normal Back button this would be:
Expression v_Back = cpInfoCurrentSlide - 1
The action for the dynamic Back button will be:
Expression cpCmndGotoSlide = v_Back - 1
On the slides where you want to navigate to a slide which is not the previous slide, edit the On Enter action, replacing cpInfoCurrentSlide by the wanted slide to navigate to.
I prefer also shared actions for both the Back button action and the On Enter action.
In my Shared actions Library I have three Shared actions for the Next/Back buttons:
NextAct Assign cpCmndGotoSlide with v_Next
BackAct Expression cpCmndGotoSlide = v_Back - 1
EnterAct Assign v_Next with cpInfoCurrentSlide
Expression v_Back = cpInfoCurrentSlide - 1
- In a new project, drag the shared actions to the Project Library of the new project. It is important to drag them simultaneously to avoid the variables v_Next and v_Back to be created twice.
- Add Next/Back buttons with one of the two workflows. Apply the Shared action ‘NextAct’ directly to the Next button and 'BackAct' to the Back 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, which is possible by selecting all slides in the Filmstrip (Ctrl-A) and adding to the slide Enter event.
- Identify those slides where the buttons needs to navigate to other slides and edit the Advanced action 'EnterAct' 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 or copy/paste a button on each slide and add the appropriate action using the Interaction tool.