|
4 | 4 | * Contributing Author: Tyler Smith |
5 | 5 | */ |
6 | 6 | ; |
7 | | -(function(factory) { |
8 | | - if (typeof define === 'function' && define.amd) { |
9 | | - // AMD. Register as an anonymous module. |
10 | | - define(['jquery'], factory); |
11 | | - } else { |
12 | | - // Browser globals |
13 | | - factory(jQuery); |
14 | | - } |
15 | | -}(function ($) { |
| 7 | +(function ($) { |
16 | 8 |
|
17 | 9 | //FlexSlider: Object Instance |
18 | 10 | $.flexslider = function(el, options) { |
|
22 | 14 | slider.vars = $.extend({}, $.flexslider.defaults, options); |
23 | 15 |
|
24 | 16 | var namespace = slider.vars.namespace, |
25 | | - touch = (("ontouchstart" in window) || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch, |
| 17 | + touch = (( "ontouchstart" in window ) || ( window.navigator.msPointerEnabled ) || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch, |
26 | 18 | // depricating this idea, as devices are being released with both of these events |
27 | 19 | //eventType = (touch) ? "touchend" : "click", |
28 | | - eventType = "click touchend", |
| 20 | + eventType = "click touchend MSPointerUp", |
29 | 21 | watchedEvent = "", |
30 | 22 | watchedEventClearTimer, |
31 | 23 | vertical = slider.vars.direction === "vertical", |
|
137 | 129 | if (touch && slider.vars.touch) methods.touch(); |
138 | 130 |
|
139 | 131 | // FADE&&SMOOTHHEIGHT || SLIDE: |
140 | | - if (!fade || (fade && slider.vars.smoothHeight)) $(window).bind("resize focus", methods.resize); |
| 132 | + if (!fade || (fade && slider.vars.smoothHeight)) $(window).bind("resize orientationchange focus", methods.resize); |
141 | 133 |
|
142 | 134 |
|
143 | 135 | // API: start() Callback |
|
176 | 168 | setupPaging: function() { |
177 | 169 | var type = (slider.vars.controlNav === "thumbnails") ? 'control-thumbs' : 'control-paging', |
178 | 170 | j = 1, |
179 | | - item; |
| 171 | + item, |
| 172 | + slide; |
180 | 173 |
|
181 | 174 | slider.controlNavScaffold = $('<ol class="'+ namespace + 'control-nav ' + namespace + type + '"></ol>'); |
182 | 175 |
|
183 | 176 | if (slider.pagingCount > 1) { |
184 | 177 | for (var i = 0; i < slider.pagingCount; i++) { |
185 | | - item = (slider.vars.controlNav === "thumbnails") ? '<img src="' + slider.slides.eq(i).attr("data-thumb") + '"/>' : '<a>' + j + '</a>'; |
| 178 | + slide = slider.slides.eq(i); |
| 179 | + item = (slider.vars.controlNav === "thumbnails") ? '<img src="' + slide.attr( 'data-thumb' ) + '"/>' : '<a>' + j + '</a>'; |
| 180 | + if ( 'thumbnails' === slider.vars.controlNav && true === slider.vars.thumbCaptions ) { |
| 181 | + var captn = slide.attr( 'data-thumbcaption' ); |
| 182 | + if ( '' != captn && undefined != captn ) item += '<span class="' + namespace + 'caption">' + captn + '</span>'; |
| 183 | + } |
186 | 184 | slider.controlNavScaffold.append('<li>' + item + '</li>'); |
187 | 185 | j++; |
188 | 186 | } |
|
367 | 365 | function onTouchStart(e) { |
368 | 366 | if (slider.animating) { |
369 | 367 | e.preventDefault(); |
370 | | - } else if ( e.touches.length === 1 || ( window.navigator.msPointerEnabled && e.isPrimary ) ) { |
| 368 | + } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) { |
371 | 369 | slider.pause(); |
372 | 370 | // CAROUSEL: |
373 | 371 | cwidth = (vertical) ? slider.h : slider. w; |
|
397 | 395 | // Cater for Windows-device touch events. |
398 | 396 | if (window.navigator.msPointerEnabled) { |
399 | 397 | el.addEventListener('MSPointerMove', onTouchMove, false); |
400 | | - el.addEventListener('MSPointerUp', onTouchEnd, false); |
| 398 | + el.addEventListener('MSPointerOut', onTouchEnd, false); |
401 | 399 | } |
402 | 400 | } |
403 | 401 | } |
404 | 402 |
|
405 | 403 | function onTouchMove(e) { |
406 | 404 | // Local vars for X and Y points. |
407 | | - localX = e.touches[0].pageX; |
408 | | - localY = e.touches[0].pageY; |
409 | 405 | // Cater for Windows-device touch events. |
410 | | - if (window.navigator.msPointerEnabled) { |
| 406 | + if ( window.navigator.msPointerEnabled ) { |
411 | 407 | localX = e.pageX; |
412 | 408 | localY = e.pageY; |
| 409 | + } else { |
| 410 | + localX = e.touches[0].pageX; |
| 411 | + localY = e.touches[0].pageY; |
413 | 412 | } |
414 | 413 |
|
415 | 414 | dx = (vertical) ? startX - localY : startX - localX; |
416 | 415 | scrolling = (vertical) ? (Math.abs(dx) < Math.abs(localX - startY)) : (Math.abs(dx) < Math.abs(localY - startY)); |
417 | 416 |
|
418 | | - if (!scrolling || Number(new Date()) - startT > 500) { |
| 417 | + if ( window.navigator.msPointerEnabled ) { |
| 418 | + var fxms = 100; |
| 419 | + } else { |
| 420 | + var fxms = 500; |
| 421 | + } |
| 422 | + |
| 423 | + if ( ! scrolling || Number( new Date() ) - startT > fxms ) { |
419 | 424 | e.preventDefault(); |
420 | 425 | if (!fade && slider.transitions) { |
421 | 426 | if (!slider.vars.animationLoop) { |
|
447 | 452 | el.removeEventListener('touchend', onTouchEnd, false); |
448 | 453 | // Cater for Windows-device touch events. |
449 | 454 | if (window.navigator.msPointerEnabled) { |
450 | | - el.removeEventListener('MSPointerUp', onTouchEnd, false); |
| 455 | + el.removeEventListener('MSPointerOut', onTouchEnd, false); |
451 | 456 | } |
452 | 457 | startX = null; |
453 | 458 | startY = null; |
|
907 | 912 | namespace: "flex-", //{NEW} String: Prefix string attached to the class of every element generated by the plugin |
908 | 913 | selector: ".slides > li", //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril |
909 | 914 | animation: "fade", //String: Select your animation type, "fade" or "slide" |
910 | | - easing: "swing", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported! |
| 915 | + easing: "swing", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported! |
911 | 916 | direction: "horizontal", //String: Select the sliding direction, "horizontal" or "vertical" |
912 | 917 | reverse: false, //{NEW} Boolean: Reverse the animation direction |
913 | | - animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end |
| 918 | + animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end |
914 | 919 | smoothHeight: false, //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode |
915 | 920 | startAt: 0, //Integer: The slide that the slider should start on. Array notation (0 = first slide) |
916 | 921 | slideshow: true, //Boolean: Animate slider automatically |
917 | 922 | slideshowSpeed: 7000, //Integer: Set the speed of the slideshow cycling, in milliseconds |
918 | 923 | animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds |
919 | 924 | initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds |
920 | 925 | randomize: false, //Boolean: Randomize slide order |
| 926 | + thumbCaptions: false, //Boolean: Whether or not to put captions on thumbnails when using the "thumbnails" controlNav. |
921 | 927 |
|
922 | 928 | // Usability features |
923 | 929 | pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended. |
|
994 | 1000 | } |
995 | 1001 | } |
996 | 1002 | } |
997 | | -}))(jQuery); |
| 1003 | +})(jQuery); |
0 commit comments