Get started with FlexSlider in 3 easy steps!
Step 1 – Link files
Add these items to the <head> of your document. This will link jQuery and the FlexSlider core CSS/JS files into your webpage. You can also choose to host jQuery on your own server, but Google is nice enough to take care of that for us!
Step 2 – Add markup
The FlexSlider markup is simple and straightforward. First, start with a single containing element, <div class=”flexslider”> in this example. Then, create a <ul class=”slides”>. It is important to use this class because the slider targets that class specifically. Put your images and anything else you desire into each <li> and you are ready to rock.
| <!-- Place somewhere in the <body> of your page --> |
| <div class="flexslider"> |
| <ul class="slides"> |
| <li> |
| <img src="slide1.jpg" /> |
| </li> |
| <li> |
| <img src="slide2.jpg" /> |
| </li> |
| <li> |
| <img src="slide3.jpg" /> |
| </li> |
| </ul> |
| </div> |
Step 3 – Hook up the slider
Lastly, add the following lines of Javascript into the <head> of your document, below the links from Step 1. The $(window).load() is required to ensure the content of the page is loaded before the plugin initializes.
| <!-- Place in the <head>, after the three links --> |
| <script type="text/javascript" charset="utf-8"> |
| $(window).load(function() { |
| $('.flexslider').flexslider(); |
| }); |
| </script> |
…and voila! That wraps up the most basic installation of FlexSlider into your webpage.
Step 4 – Tailor to your needs
Listed below are all of the options available to customize FlexSlider to suite your needs, along with their default values. For examples on how to use these properties for advanced setups, check out the
Advanced Options section.
| namespace: "flex-", //{NEW} String: Prefix string attached to the class of every element generated by the plugin |
| selector: ".slides > li", //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril |
| animation: "fade", //String: Select your animation type, "fade" or "slide" |
| easing: "swing", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported! |
| direction: "horizontal", //String: Select the sliding direction, "horizontal" or "vertical" |
| reverse: false, //{NEW} Boolean: Reverse the animation direction |
| animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end |
| smoothHeight: false, //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode |
| startAt: 0, //Integer: The slide that the slider should start on. Array notation (0 = first slide) |
| slideshow: true, //Boolean: Animate slider automatically |
| slideshowSpeed: 7000, //Integer: Set the speed of the slideshow cycling, in milliseconds |
| animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds |
| initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds |
| randomize: false, //Boolean: Randomize slide order |
| |
| // Usability features |
| pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended. |
| pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering |
| useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available |
| touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices |
| video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches |
| |
| // Primary Controls |
| controlNav: true, //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage |
| directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false) |
| prevText: "Previous", //String: Set the text for the "previous" directionNav item |
| nextText: "Next", //String: Set the text for the "next" directionNav item |
| |
| // Secondary Navigation |
| keyboard: true, //Boolean: Allow slider navigating via keyboard left/right keys |
| multipleKeyboard: false, //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present. |
| mousewheel: false, //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel |
| pausePlay: false, //Boolean: Create pause/play dynamic element |
| pauseText: 'Pause', //String: Set the text for the "pause" pausePlay item |
| playText: 'Play', //String: Set the text for the "play" pausePlay item |
| |
| // Special properties |
| controlsContainer: "", //{UPDATED} Selector: USE CLASS SELECTOR. Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be ".flexslider-container". Property is ignored if given element is not found. |
| manualControls: "", //Selector: Declare custom control navigation. Examples would be ".flex-control-nav li" or "#tabs-nav li img", etc. The number of elements in your controlNav should match the number of slides/tabs. |
| sync: "", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care. |
| asNavFor: "", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider |
| |
| // Carousel Options |
| itemWidth: 0, //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding. |
| itemMargin: 0, //{NEW} Integer: Margin between carousel items. |
| minItems: 0, //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this. |
| maxItems: 0, //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit. |
| move: 0, //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items. |
| |
| // Callback API |
| start: function(){}, //Callback: function(slider) - Fires when the slider loads the first slide |
| before: function(){}, //Callback: function(slider) - Fires asynchronously with each slider animation |
| after: function(){}, //Callback: function(slider) - Fires after each slider animation completes |
| end: function(){}, //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous) |
| added: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is added |
| removed: function(){} //{NEW} Callback: function(slider) - Fires after a slide is removed |
It's easy to build a slider with this plugin step by step.But I met some
problem when I use it.
First,
the images is so large that the height overflow my screen(my screen 1920*1080). I tried to add css style into img to resize the pictures which doesn't work. Suddenly,I realize the flexslider.js is responsive for all screen,of course not working. So I check the flexslider.css to figure out problem. At line 96,it shows .flex-viewport { max-height: 2000px;}. The height is so over above my goal,so I change to max-height: 900px; .In conclusion,
change the max-height size to whatever you want.
Second, my nav arrow didn't show up instead of text fi and fl . The solution is put the font file into your project. It's my fault that I didn't contain all the necessary files.
At last, it's show time of my simple flexslider.js demo.
Next section,I'll try to use more properties.
Then, I should add some text description below each picture. All you have to change is adding text in html and styling the text part.
Slider with caption.
|
html |
|
css |
Slider with thumbnails.
|
html |
|
js |
slider called Carousel.
|
html |
|
js |
Slider with youtube video
|
html |
|
insert js file |
Most important part is js file pasting API for youtube.
// Youtube and Vimeo Flexslider Control
// Partly from Duppi on GitHub, partly from digging into the YouTube API
// Need to set this up to use classes instead of IDs
var tag = document.createElement('script');
tag.src = "http://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
jQuery(window).load(function() {
jQuery('#hero .flexslider').flexslider({
useCSS: false,
animation: "slide",
directionNav: true,
controlNav: false,
animationLoop: true,
//slideshow: false,
pauseOnAction: true,
pauseOnHover: true,
video: true,
});
var vimeoPlayers = jQuery('#hero .flexslider').find('iframe'), player;
for (var i = 0, length = vimeoPlayers.length; i < length; i++) {
player = vimeoPlayers[i];
$f(player).addEvent('ready', ready);
}
function addEvent(element, eventName, callback) {
if (element.addEventListener) {
element.addEventListener(eventName, callback, false)
} else {
element.attachEvent(eventName, callback, false);
}
}
function ready(player_id) {
var froogaloop = $f(player_id);
froogaloop.addEvent('play', function(data) {
jQuery('#hero .flexslider').flexslider("pause");
});
froogaloop.addEvent('pause', function(data) {
jQuery('#hero .flexslider').flexslider("play");
});
}
jQuery("#hero .flexslider")
.flexslider({
before: function(slider){
if (slider.slides.eq(slider.currentSlide).find('iframe').length !== 0)
$f( slider.slides.eq(slider.currentSlide).find('iframe').attr('id') ).api('pause');
/* ------------------ YOUTUBE FOR AUTOSLIDER ------------------ */
playVideoAndPauseOthers($('.play3 iframe')[0]);
}
});
function playVideoAndPauseOthers(frame) {
jQuery('iframe').each(function(i) {
var func = this === frame ? 'playVideo' : 'stopVideo';
this.contentWindow.postMessage('{"event":"command","func":"' + func + '","args":""}', '*');
});
}
/* ------------------ PREV & NEXT BUTTON FOR FLEXSLIDER (YOUTUBE) ------------------ */
/*
jQuery('.flex-next, .flex-prev').click(function() {
playVideoAndPauseOthers($('.play3 iframe')[0]);
});
*/
//YOUTUBE STUFF
function controlSlider(event) {
console.log(event);
var playerstate=event.data;
console.log(playerstate);
if(playerstate==1 || playerstate==3){
jQuery('#hero .flexslider').flexslider("pause");
};
if(playerstate==0 || playerstate==2){
jQuery('#hero .flexslider').flexslider("play");
};
};
var player = new YT.Player('youtubevideo', {
events: {
'onReady': function(event) { console.log(event); },
'onStateChange': function(event) { controlSlider(event); }
}
});
});
my demo download from:
https://pan.baidu.com/s/1o7BjFIU