Step Carousel Viewer v2.0
Note (Nov 25th, 14): v2.0 Adds support for fluid width carousel, navigate by swiping/ mouse dragging, and image-less navigation buttons. See changelog.
Description: Step Carousel Viewer displays images or even rich HTML by side scrolling them left or right. Users can step to any specific panel on demand, or browse the gallery sequentially by stepping through x number of panels each time. A smooth sliding animation is used to transition between steps. And fear not in taming this script to go exactly where you want it to- two public methods, two custom event handlers, and three "status" variables are here for that purpose. Some highlights of this script:
-
Contents for the Step Carousel Viewer can be defined either directly inline on the page or via Ajax and extracted from an external file instead.
-
Carousel supports a fixed or percentage outer width, enabling responsive carousels. v2.0 feature
-
Ability to specify whether panels should wrap after reaching the two ends, or stop at the first/last panel.
-
Carousel can be navigated by swiping (in mobile devices), or mouse dragging. v2.0 feature
-
Panel persistence supported, so the last viewed panel can be remembered and recalled within the same browser session.
-
Ability for Carousel to auto rotate as dictated by the new parameter:
autostep: {enable:true, moveby:1, pause:3000}
During this mode, Carousel pauses onMouseover, resumes onMouseout, and clicking Carousel halts auto rotation altogether. -
Option to specify two navigational images that's automatically positioned to the left and right of the Carousel Viewer to move the panels back and forth.
-
Ability to auto generate pagination buttons based on the total number of panels within a Carousel and positioned anywhere on the page. v2.0 improved feature
-
The contents of a Carousel can be updated on demand after the page has loaded with new contents from an external file.
Demo #1: Auto rotation enabled (every 3 seconds, 1 panel each time), left/right nav buttons enabled, pagination buttons enabled.
Demo #2: Wrap around enabled ("slide"), left/right nav buttons enabled, pagination buttons enabled, status variables enabled.
|
Demo #3: Wrap around enabled ("pushpull"), variable content widths, moves 2 panels at a time, illustration of new content loaded on demand.
1
2
3
4
5
6
7
|
Step 1: Add the following script to the <head> section of your page:
The code above references two external .js files, which you need to download below (right click/ select "Save As"):
- stepcarousel.js (2 variables near the top you can customize)
- 3 images used as part of script's interface:
Step 2: Add the following HTML to the <BODY> of your page, which corresponds to the HTML for the first demo you see above:
That's it for installation, but this script is only as good as your understanding of it, so time for some documentation.
Basic Set Up Information
The HTML for a Step Carousel viewer follows a set structure consisting of 3 levels of nested DIVs- the main "carousel" DIV, an inner "belt" DIV, finally followed by "panel" DIVs that each hold some actual content:
Sample Step Carousel HTML:
<div id="mygallery" class="stepcarousel"> |
Visual interpretation:
Carousel DIV Belt DIV
Panel DIV 1
Panel DIV 2
Panel DIV 3
Panel DIV 4 etc...
|
All the IDs and class names (in red above) can be arbitrary in their values, but must be defined for the script to know what's what. Each piece of content you wish to show would then be wrapped around its own "panel" DIV (in yellow), whether it's just an image, or rich HTML etc.
Moving on, we come to the sample HTML for the buttons/ links used to navigate a Step Carousel Viewer.
Sample HTML for Carousel Viewer navigation:
<p class="samplebuttons">
<a href="javascript:stepcarousel.stepBy('mygallery', -1)">Back
1 Panel</a> <a href="javascript:stepcarousel.stepBy('mygallery',
1)" style="margin-left: 80px">Forward 1 Panel</a> <br />
<a href="javascript:stepcarousel.stepTo('mygallery', 1)">To
1st Panel</a> <a href="javascript:stepcarousel.stepBy('mygallery',
2)" style="margin-left: 80px">Forward 2 Panels</a>
</p>
Simply call the two methods stepBy()
or
stepTo()
using the ID of your Carousel
Viewer plus how much to move by anywhere on your page.
Last but certainly not least, the initialization script and CSS in the HEAD of your page is what will transform the HTML into a Step Carousel Viewer:
Sample Step Carousel invocation code
<script type="text/javascript"> |
Sample Step Carousel CSS: <style
type="text/css"> |
For the invocation code on your left, notice the first 3
parameters and their values in red, which should match up with the CSS class
names you assigned to the DIVs in the HTML. The code supports other
parameters, which we'll cover in detail later. On to the CSS code on your
right, the 3 levels of DIVs- "carousel",
"belt", and "panel" DIVs can be styled however you
wish, but take note of the sideline comments on which ones should be
left alone or treated with care. In particular, the "width
"
property in red deserves special attention:
width: 250px; /*Width of each panel holding each content. If removed, widths
should be individually defined on each content DIV then. */
}
This property sets the width of each "panel" DIV (the ones in yellow visually above), and is required in the sense that the script needs to know in advanced the width of each panel. In the simplistic scenario where all your panels can be the same width, you'd simply set the above property to the desired value and that's that. However, in the more common scenario where your panels should be of differing widths, there's another way to set their widths that's flexible. See "Two ways to set panel widths" for more information.
Available stepcarousel.setup()
parameters
The initialization code supports several parameters, although only the first three are required. Here they are in full force:
Parameter | Description |
---|---|
galleryid: "galleryid" Required |
Set this parameter to the ID attribute value of the outermost Carousel DIV. |
beltclass: "belt_div_class" Required |
Set this parameter to the CSS class of the main inner DIV that contains all the "panel" DIVs. |
panelclass: "panel_divs_class" Required |
Set this parameter to the shared CSS class of each
"panel" DIV within the Carousel, which contains the actual contents. Each panel DIV must have a width defined, either via global CSS or inline CSS, in order for the script to work properly! See "Two ways to set panel widths" for more information. |
autostep: {enable:true, moveby:1, pause:3000} v1.6 parameter |
Set this parameter to auto rotate the panels, specifying
the number of panels to move each time, and pause between rotating. Note
that during auto rotation, moving the mouse over the Carousel or the
default buttons (if enabled) pauses it, while moving your mouse out
resumes it again. Clicking on the Carousel stops auto rotation
altogether. This parameter has 3 properties:
Note that if |
panelbehavior: {speed:300, wraparound:false,
wrapbehavior:"pushpull|slide",
persist:true} Required |
This parameter has 4 properties:
|
defaultbuttons: {enable: true, moveby: 1, leftnav:
['arrowl.gif', -10, 100], rightnav: ['arrowr.gif', -10, 100]} Required |
This parameter lets you enable/ disable two navigational
images that are auto positioned to the left and right of the Carousel
Viewer. You can further tweak each image's offsets from its default
position. This parameter has 4 properties:
nmnm |
statusvars: ["var1", "var2", "var3"] |
Optional parameter that lets you define 3 arbitrary but
unique variable names to be used to store the currently shown
panel (starting), currently shown panel (final), and finally, the total
number of panels in this Carousel. With the 3 variable names defined, you can also add 3 HTML elements on your page with the same 3 ID values that the script will use to show this information to your visitors. See "Status Variables- "status1", "status2", and "status3" for full details. |
contenttype: [contenttype, [filepath]] |
Optional parameter that lets you specify where your
"panel" DIVs and the actual contents are located.. Defaults to "inline "
which means they exist physically on the page (nested inside the main
"Carousel" and "belt" DIVs.You can move all the panel DIVs to an
external file, and use Ajax to dynamically fetch them instead. In this
case, set the 1st parameter to " contenttype: ["ajax", "somefile.htm"] When specifying an external content source, you can now empty all the panel DIVs on your page itself, and move that to the external file: <div id="mygallery" class="stepcarousel"> somefile.htm should now contain: <div class="panel"> |
oninit:function(){ |
Optional event handler that fires once as soon as
a Carousel has finished initializing and is ready for user interaction.
You can use this to run tasks that depend on the Carousel having
finished loading:
oninit:function(){ |
onslide:function(){ |
Optional event handler that fires
whenever the Carousel slides and completes going to a panel (such as
after calling stepTo() and stepBy() ). It's
also fired 1 time when the Carousel has finished loading(similar to
oninit() ). Typically used in combination with the status
variables (assuming you've defined them) to access the index number of
the currently shown panels in your own scripts. For example, the below
example uses the onslide() event handler plus the status
variables to show in the browser's status bar which panels are currently
being shown:statusvars: ["startA", "startB",
"total"], |
onpanelclick:function(target){ |
Optional event handler that fires whenever user clicks on one of the panels. A
target parameter that
contains the currently clicked on element (not necessarily the panel
itself!) is automatically passed to your code. Using it, for example,
you can easily have images within the Carousel pop up again in a new
window when clicked on:
onpanelclick:function(target){ See "oninit(), onslide() and onpanelclick() event handlers" for full details. |
Remember, all but the first 3 parameters above are optional depending on what features you need to use.
Public Navigation Methods
Step Carousel supports 3 public methods you can call anywhere on the page to navigate to specific panels in a Carousel or modify its contents on demand. They are:
Public Method | Description |
---|---|
stepcarousel.stepBy('galleryid', steps) |
Increments a Carousel Viewer by x number of panels when
invoked. The first parameter should be the ID of the Carousel Viewer
itself, while the second an integer (1 or greater) indicating the number
of panels you wish to step by. For example: <a
href="javascript:stepcarousel.stepBy('mygallery', 1)">Forward 1
panel</a>
|
stepcarousel.stepTo('galleryid', index) |
Moves to a specific panel within a Carousel Viewer (count
starts at 1). The first parameter should be the ID of the Carousel
Viewer itself, while the second an integer (1 or greater) specifying the
panel number to move to: <a
href="javascript:stepcarousel.stepTo('mygallery', 1)">Move to very first
panel</a>
|
stepcarousel.loadcontent('galleryid',
'path_to_file') v1.8 method |
Dynamically repopulates a Carousel with new content from
an external file on your server using Ajax. The external file should
contain the HTML for the new panels themselves, such as: somefile.htm <div class="panel"> To update a Carousel with contents from this file, call <a href="javascript:stepcarousel.stepTo('mygallery', 'somefile.htm')">Modify Step Carousel contents</a> The above link when clicked on will update the Carousel with ID " See "Populating a Carousel using Ajax content (initially or on demand)" for full details. |
Navigating via swipe and mouse dragging- setting the number of panels to move each time
Navigating by swiping on mobile devices and mouse dragging
inside the carousel is built into the script. The number of panels that's moved
each time this action is taken is tied up with the same setting inside the
option defaultbuttons:{}
above:
defaultbuttons: {enable: true, moveby: 1, leftnav:
['arrowl.gif', -10, 100], rightnav: ['arrowr.gif', -10, 100]}
The "moveby
" option in red sets the number of
panels the auto generated navigation buttons move each time they are clicked on;
this option also sets the same for when the carousel is swiped.
Lets say you do NOT wish to enable the default navigation
buttons but want to set the carousel swipe to move 2 panels at a time. The
following defaultbuttons:{}
option
will do that:
defaultbuttons: {enable: false, moveby:
2, leftnav:
['arrowl.gif', -10, 100], rightnav: ['arrowr.gif', -10, 100]}
Table Of Contents
This script consists of an index page plus 4 supplementary pages: