|
1 | 1 | /*
|
2 |
| - * jQuery FlexSlider v2.2.2 |
| 2 | + * jQuery FlexSlider v2.3.0 |
3 | 3 | * Copyright 2012 WooThemes
|
4 | 4 | * Contributing Author: Tyler Smith
|
5 | 5 | */
|
|
18 | 18 | touch = (( "ontouchstart" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch,
|
19 | 19 | // depricating this idea, as devices are being released with both of these events
|
20 | 20 | //eventType = (touch) ? "touchend" : "click",
|
21 |
| - eventType = "click touchend MSPointerUp", |
| 21 | + eventType = "click touchend MSPointerUp keyup", |
22 | 22 | watchedEvent = "",
|
23 | 23 | watchedEventClearTimer,
|
24 | 24 | vertical = slider.vars.direction === "vertical",
|
|
70 | 70 | }
|
71 | 71 | return false;
|
72 | 72 | }());
|
| 73 | + slider.ensureAnimationEnd = ''; |
73 | 74 | // CONTROLSCONTAINER:
|
74 | 75 | if (slider.vars.controlsContainer !== "") slider.controlsContainer = $(slider.vars.controlsContainer).length > 0 && $(slider.vars.controlsContainer);
|
75 | 76 | // MANUAL:
|
|
593 | 594 | }
|
594 | 595 | },
|
595 | 596 | uniqueID: function($clone) {
|
596 |
| - $clone.find( '[id]' ).each(function() { |
| 597 | + // Append _clone to current level and children elements with id attributes |
| 598 | + $clone.filter( '[id]' ).add($clone.find( '[id]' )).each(function() { |
597 | 599 | var $this = $(this);
|
598 | 600 | $this.attr( 'id', $this.attr( 'id' ) + '_clone' );
|
599 | 601 | });
|
|
602 | 604 | pauseInvisible: {
|
603 | 605 | visProp: null,
|
604 | 606 | init: function() {
|
605 |
| - var prefixes = ['webkit','moz','ms','o']; |
606 |
| - |
607 |
| - if ('hidden' in document) return 'hidden'; |
608 |
| - for (var i = 0; i < prefixes.length; i++) { |
609 |
| - if ((prefixes[i] + 'Hidden') in document) |
610 |
| - methods.pauseInvisible.visProp = prefixes[i] + 'Hidden'; |
611 |
| - } |
612 |
| - if (methods.pauseInvisible.visProp) { |
613 |
| - var evtname = methods.pauseInvisible.visProp.replace(/[H|h]idden/,'') + 'visibilitychange'; |
| 607 | + var visProp = methods.pauseInvisible.getHiddenProp(); |
| 608 | + if (visProp) { |
| 609 | + var evtname = visProp.replace(/[H|h]idden/,'') + 'visibilitychange'; |
614 | 610 | document.addEventListener(evtname, function() {
|
615 | 611 | if (methods.pauseInvisible.isHidden()) {
|
616 |
| - if(slider.startTimeout) clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible |
617 |
| - else slider.pause(); //Or just pause |
| 612 | + if(slider.startTimeout) { |
| 613 | + clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible |
| 614 | + } else { |
| 615 | + slider.pause(); //Or just pause |
| 616 | + } |
618 | 617 | }
|
619 | 618 | else {
|
620 |
| - if(slider.started) slider.play(); //Initiated before, just play |
621 |
| - else (slider.vars.initDelay > 0) ? setTimeout(slider.play, slider.vars.initDelay) : slider.play(); //Didn't init before: simply init or wait for it |
| 619 | + if(slider.started) { |
| 620 | + slider.play(); //Initiated before, just play |
| 621 | + } else { |
| 622 | + if (slider.vars.initDelay > 0) { |
| 623 | + setTimeout(slider.play, slider.vars.initDelay); |
| 624 | + } else { |
| 625 | + slider.play(); //Didn't init before: simply init or wait for it |
| 626 | + } |
| 627 | + } |
622 | 628 | }
|
623 | 629 | });
|
624 | 630 | }
|
625 | 631 | },
|
626 | 632 | isHidden: function() {
|
627 |
| - return document[methods.pauseInvisible.visProp] || false; |
| 633 | + var prop = methods.pauseInvisible.getHiddenProp(); |
| 634 | + if (!prop) { |
| 635 | + return false; |
| 636 | + } |
| 637 | + return document[prop]; |
| 638 | + }, |
| 639 | + getHiddenProp: function() { |
| 640 | + var prefixes = ['webkit','moz','ms','o']; |
| 641 | + // if 'hidden' is natively supported just return it |
| 642 | + if ('hidden' in document) { |
| 643 | + return 'hidden'; |
| 644 | + } |
| 645 | + // otherwise loop over all the known prefixes until we find one |
| 646 | + for ( var i = 0; i < prefixes.length; i++ ) { |
| 647 | + if ((prefixes[i] + 'Hidden') in document) { |
| 648 | + return prefixes[i] + 'Hidden'; |
| 649 | + } |
| 650 | + } |
| 651 | + // otherwise it's not supported |
| 652 | + return null; |
628 | 653 | }
|
629 | 654 | },
|
630 | 655 | setToClearWatchedEvent: function() {
|
|
719 | 744 | slider.animating = false;
|
720 | 745 | slider.currentSlide = slider.animatingTo;
|
721 | 746 | }
|
| 747 | + |
| 748 | + // Unbind previous transitionEnd events and re-bind new transitionEnd event |
722 | 749 | slider.container.unbind("webkitTransitionEnd transitionend");
|
723 | 750 | slider.container.bind("webkitTransitionEnd transitionend", function() {
|
| 751 | + clearTimeout(slider.ensureAnimationEnd); |
724 | 752 | slider.wrapup(dimension);
|
725 | 753 | });
|
| 754 | + |
| 755 | + // Insurance for the ever-so-fickle transitionEnd event |
| 756 | + clearTimeout(slider.ensureAnimationEnd); |
| 757 | + slider.ensureAnimationEnd = setTimeout(function() { |
| 758 | + slider.wrapup(dimension); |
| 759 | + }, slider.vars.animationSpeed + 100); |
| 760 | + |
726 | 761 | } else {
|
727 | 762 | slider.container.animate(slider.args, slider.vars.animationSpeed, slider.vars.easing, function(){
|
728 | 763 | slider.wrapup(dimension);
|
|
871 | 906 | slider.cloneOffset = 1;
|
872 | 907 | // clear out old clones
|
873 | 908 | if (type !== "init") slider.container.find('.clone').remove();
|
874 |
| - slider.container.append(slider.slides.first().clone().addClass('clone').attr('aria-hidden', 'true')).prepend(slider.slides.last().clone().addClass('clone').attr('aria-hidden', 'true')); |
875 |
| - methods.uniqueID( slider.slides.first().clone().addClass('clone') ).appendTo( slider.container ); |
876 |
| - methods.uniqueID( slider.slides.last().clone().addClass('clone') ).prependTo( slider.container ); |
| 909 | + slider.container.append(methods.uniqueID(slider.slides.first().clone().addClass('clone')).attr('aria-hidden', 'true')) |
| 910 | + .prepend(methods.uniqueID(slider.slides.last().clone().addClass('clone')).attr('aria-hidden', 'true')); |
877 | 911 | }
|
878 | 912 | slider.newSlides = $(slider.vars.selector, slider);
|
879 | 913 |
|
|
902 | 936 | if (type === "init") {
|
903 | 937 | if (!touch) {
|
904 | 938 | //slider.slides.eq(slider.currentSlide).fadeIn(slider.vars.animationSpeed, slider.vars.easing);
|
905 |
| - slider.slides.css({ "opacity": 0, "display": "block", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2}).animate({"opacity": 1},slider.vars.animationSpeed,slider.vars.easing); |
| 939 | + if (slider.vars.fadeFirstSlide == false) { |
| 940 | + slider.slides.css({ "opacity": 0, "display": "block", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2}).css({"opacity": 1}); |
| 941 | + } else { |
| 942 | + slider.slides.css({ "opacity": 0, "display": "block", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2}).animate({"opacity": 1},slider.vars.animationSpeed,slider.vars.easing); |
| 943 | + } |
906 | 944 | } else {
|
907 | 945 | slider.slides.css({ "opacity": 0, "display": "block", "webkitTransition": "opacity " + slider.vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2});
|
908 | 946 | }
|
|
1059 | 1097 | animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds
|
1060 | 1098 | initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds
|
1061 | 1099 | randomize: false, //Boolean: Randomize slide order
|
| 1100 | + fadeFirstSlide: true, //Boolean: Fade in the first slide when animation type is "fade" |
1062 | 1101 | thumbCaptions: false, //Boolean: Whether or not to put captions on thumbnails when using the "thumbnails" controlNav.
|
1063 | 1102 |
|
1064 | 1103 | // Usability features
|
|
1070 | 1109 | video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches
|
1071 | 1110 |
|
1072 | 1111 | // Primary Controls
|
1073 |
| - controlNav: true, //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage |
| 1112 | + controlNav: true, //Boolean: Create navigation for paging control of each slide? Note: Leave true for manualControls usage |
1074 | 1113 | directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false)
|
1075 | 1114 | prevText: "Previous", //String: Set the text for the "previous" directionNav item
|
1076 | 1115 | nextText: "Next", //String: Set the text for the "next" directionNav item
|
|
0 commit comments