Introduction
The goal is to create an accessible and inclusive design and implementation of the existing John Travoltage simulation.
The design and development approach is to create an equivalent version of the simulation using solely native HTML 5 elements. The purpose of this approach is to create an interaction that is natively supported by assertive technologies, and integrate this as the parallel DOM to the existing simulation. Design and usability will be informed by a participatory design process involving experts and stakeholders.
Current Demos
- John Travoltage Simulation with Keyboard and Screen Reader Accessibility
- John Travoltage Simulation Prototype with sonification
One Sim. Multiple On-Ramps.
To a sighted user, the John Travoltage sim appears as it would on the left below. To a non-sighted user, the same simulation would appear like on the right below.


Coupled with sonification, updating text descriptions, support for keyboard and gesture input - users can have multiple ways of interacting with the sim.
This is what the current development version of the native HTML 5 version is like:

Try the demo at: https://jhung.github.io/john-travoltage-html/
Updating Description of the Sim
After the sim's header, there is a description of the sim. As the user interacts with the sim, this description is updated to reflect the current state of the sim. The intention is that the user can come back to this description any time to get an updated description.
Because the simulation has a finite possible states, it's possible to automatically generate a text description to reflect what is happened visually.
Initial Description
The following paragraph is the sim's description on first load, and before any action has been performed. This initial description is replaced by sentences taken from the tables below once the user has interacted with the sim.
"Actor John Travolta is standing with a foot on the rug, and his hand is very close to the doorknob."
Rubbing has occurred with a change in charge qty. | John has rubbed his foot on the rug and has gained | a small a moderate a large the maximum | number of negative charges.
|
---|
No rubbing has occurred and no change in charge qty. | No description needed. |
---|
Additional description for slight foot movements that don't change the quantity of charge in a significant way. This will not be implemented immediately and will depend on initial testing.
Rubbing has occurred but only slight change in charge qty. | John has rubbed his foot on the rug slightly and he still has a | small moderate large | number of negative charges. |
---|
Hand Description Table
Moved away from doorknob | His* hand has moved | away from | the doorknob, and is | closest to very close to close to somewhat close to neither far or close to somewhat far from far from farthest from
| it.
|
---|
Moved toward doorknob | toward |
---|
No change in position | - | His* hand is | the doorknob. |
---|
* replace "His" with "John" if there is no foot description.
Additional description for slight movements that don't result in a change in the descriptive hand position region. This will not be implemented immediately and will depend on initial testing.
Moved slightly away from doorknob | His hand has moved slightly | away from | the doorknob, and is still
| closest to very close to close to somewhat close to neither far or close to somewhat far from far from farthest from | it. |
---|
Moved slightly toward doorknob | toward |
---|
Charge Description Table
The following description is rendered only when there has been a discharge.
"John's small number of negative charges have been discharged and there are no negative charges left."
Change in the quantity of charges after a discharge occurred | The small The moderate The large | number of extra negative charges on John have been discharged | and there | are | no a small number of a moderate number of a large number of | negative charges left. |
---|
No discharge and no change in quantity of charges | There are | a small a moderate a large | - | number of charges on John. |
---|
Example Descriptions
The following is an example of how a description of the sim updates as a user interacts with the game.
| Description text |
---|
Default description on sim load | "John is standing with a foot on the rug, and his hand is very close to the doorknob." |
After foot has moved and a few charges have been gathered. No hand movement.
| "John has rubbed his foot on the rug and has gained a small number of negative charges. His hand is very close to the doorknob." |
After hand is moved closer to the doorknob | "John's hand has moved toward the doorknob, and is very close to it. There is a small amount of charges on John." |
A few more charges are gained and some discharge occurs.
| "John has rubbed his foot on the rug and has gained a moderate number of negative charges. His hand is very close to the doorknob. The large amount of extra negative charges on John have been discharged and there is a small amount of negative charges left." |
Leg and Arm as an HTML Slider
Implement the arm and leg as an HTML slider. For further background on this decision, see PhET John Travoltage Arm Implementation Research.
Reasoning
- A slider is immediately understood by a screen reader.
- Non-sighted keyboard users would understand how to use it.
- The slider maps nicely to the range of motion of the arm or leg:
- Each extreme of the slider would be the extremes of the limb motion
- Middle of the slider would be closest arm position to the door knob, or the perpendicular position of the leg to the carpet.
- Native keyboard support:
- Cursor keys move the slider.
- PgUp / PgDown skips by increments.
- Home / End moves from one extreme to the other.
No-Wrapping
- If the arm is implemented using a slider, there will not be any wrapping when the user has reached an extreme. They will be forced to move in the opposite direction. This is mitigated by the supported native short-cut keys.
Arm Implementation as Slider
To someone using a screen reader, the hand position is controlled by a slider with values ranging from 0 to 60. By default the slider will be at position 12. As the user adjusts the slider, the screen reader will read back the slider position and its relative position to the door knob.
To a sighted user, the arm can be dragged around in a circle but the motion stops at the 0 (or 60) mark at the top of the circle.
Implementation Details
- Slider label "Hand position"
- As the position on the slider moves / hand moves around the arc:
- the sim description is updated with new text if the region changes.
- the AT would read back the region if it changes
- two notes are played indicating both proximity and direction of arm movement relative to the doorknob.
- The default value is approximately 12 (exact value TBD)


Interesting Moments
Moment | Result |
---|
Focus lands on arm | - Focus outline appears around arm.
- Current region is read back to the user (i.e. "Hand is close to the doorknob").
- Focus is on the slider in parallel DOM.
|
Up / Right Arrow Press | - Arm move clockwise 1 unit
- Slider increases value by 1
- 2-note sonification is played (see below for description)
|
Down / Left Arrow Press | - Arm moves counter-clockwise 1 unit
- Slider decreases value by 1
- 2-note sonification is played (see below for description)
|
PgUp Press | - Arm move clockwise 5 units
- Slider increases value by 5
- 2-note sonification is played (see below for description)
|
PgDn Press | - Arm moves counter-clockwise 5 units
- Slider decreases value by 5
- 2-note sonification is played in decreasing tone (see below for description)
|
Arm movement | - sim description is updated as the arm moves around the arc.
- If the arm does not change regions, then there is no need to update the description.
- If the arm changes regions:
- sim description is updated
- screen reader reads out the change in regions (not the full description, just the arm region change).
|
0 | - "Position 0, farthest from the door knob".
|
1 to 8 | - "Position #, very far from the door knob".
- Where # can be 1, 2, 3, 4, 5, 6, 7, or 8.
|
9 to 16 | - "Position #, far from the door knob".
- Where # can be 9, 10, 11, 12, 13, 14, 15, or 16.
|
17 to 24 | - “Position #, neither far or close to the door knob”.
- Where # can be 17, 18, 19, 20, 21, 22, 23, or 24.
|
25 to 32 | - "Position #, somewhat close to the door knob".
- Where # can be 25, 26, 27, 28, 29, 30, 31, or 32.
|
33 to 40 | - "Position #, close to the door knob".
- Where # can be 33, 34, 35, 36, 37, 38, 39, or 40.
|
41 to 49 | - "Position #, very close to the door knob".
- Where # can be 41, 42, 43, 44, 45, 46, 47, 48, or 49.
|
50 | - "Position 50, closest to the door knob".
|
51 to 59 | - "Position #, very close to the door knob".
- Where # can be 51, 52, 53, 54, 55, 56, 57, 58, or 59.
|
60 to 67 | - "Position #, close to the door knob".
- Where # can be 60, 61, 62, 63, 64, 65, 66, or 67.
|
68 to 75 | - "Position #, somewhat close to the door knob".
- Where # can be 68, 69, 70, 71, 72, 73, 74, or 75.
|
76 to 83 | - “Position #, neither far or close to the door knob”.
- Where # can be 76, 77, 78, 79, 80, 81, 82, or 83.
|
84 to 91 | - "Position #, far from the door knob".
- Where # can be 84, 85, 86, 87, 88, 89, 90, or 91.
|
92 to 99 | - "Position #, very far from the door knob".
- Where # can be 92, 93, 94, 95, 96, 97, 98, or 99.
|
100 | - "Position 0, farthest from the door knob".
|
Leg Implementation as Slider


Interesting Moments
Moment | Result |
---|
Focus lands on the leg | - Focus outline appears around leg.
- Current region is read back to the user (i.e. "Foot is on the carpet").
- Focus is on the slider in parallel DOM.
|
Up / Right Arrow Press | - Leg move clockwise 1 unit
- Slider increases value by 1
- 2-note sonification is played (see below for description)
|
Down / Left Arrow Press | - Leg move counter-clockwise 1 unit
- Slider decreases value by 1
- 2-note sonification is played (see below for description)
|
PgDn Press | - Leg move clockwise 5 units
- Slider increases value by 5
- 2-note sonification is played (see below for description)
|
PgUp Press | - Leg move clockwise 5 units
- Slider increases value by 5
- 2-note sonification is played (see below for description)
|
Leg Movement | - sim description can be updated as the leg moves around the arc.
- If the leg does not change regions, then there is no need to update the description.
- If the leg changes regions:
- sim description is updated
- screen reader reads out the change in regions (not the full description, just the leg region change).
|
0 to 9 | - “Position #, foot is off the carpet”.
- Where # can be values 0 to 9.
|
10 to 20 | - “Position #, foot is on the carpet” + "A charge has been gained" if a charge is acquired.
- Where # can be values 10 to 20.
|
21 to 30 | - “Position #, foot is off the carpet”.
- Where # can be values 21 to 30.
|
Sonification
See: PhET John Travoltage Sonification Design
Design Sketches
Screen Reader Perspective

A rendering of the John Travoltage simulation as perceived by a screen reader.
The diagram shows the simulation in its default state, and after the user has gathered electrons and has discharged them.
Interaction Mock-Up
The following are mock-ups illustrating some of the above elements put together with visuals from the simulation.

Current sketch - Dec, 2015 (Download)
Learning Outcomes
- distance and charge are related
- The more charge you have, the farther you can be to discharge
- The less charge you have, the closer you need to be to discharge
- electrons repel each other
- it is possible to create a generator by putting the finger close to the doorknob and constantly rub your feet (although this isn't directly related to static electricity)
Interactive components
- Arm rotation
- controls distance from finger to doorknob
- 360 degrees of movement
- Foot shuffle
- controls the quantity of charge
- 180 degrees of movement
Design and Interaction Notes
- For younger learners - keep it simple
- Travoltage is often used as an introductory sim for PhET
Charge / discharge behaviour:
- distribution of the charge within the body does not matter
- there is a maximum quantity of charge (i.e. there is a finite capacity)
- discharge is at a constant rate regardless of the quantity of charges.