bxslider-rails 4.2.1 → 4.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/lib/bxslider-rails/version.rb +1 -1
- data/vendor/assets/javascripts/jquery.bxslider.js +264 -86
- data/vendor/assets/stylesheets/bxslider.css.scss +10 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 616638ba19aaa709408499143730907126bf5c26
|
4
|
+
data.tar.gz: 55f6ceb412d9c941972f77e81bda120b563cbf1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4daedaf8ad39eeb97cb75e4f3a1725fd8284afbf9ad407039e0ebe3fa60047712d5acd80e12702b8bd3249db452ca6dcbe872160f07ffd42c226d3c725d41654
|
7
|
+
data.tar.gz: 2906b35304268309e6f539ea6c37da7e7e3f2fbb38c676c26f40587ecca4b05eaa96c5299fbdeac9dfa62b88aea5ec152e2e671894deff09bf38d4a6c90373c3
|
data/README.md
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
# bxSlider Rails Gem - v4.2.
|
1
|
+
# bxSlider Rails Gem - v4.2.2
|
2
2
|
|
3
|
-
jQuery bxSlider v4.2.
|
3
|
+
jQuery bxSlider v4.2.2 - http://bxslider.com
|
4
4
|
|
5
5
|
bxSlider Author: Steven Wanderski, Copyright 2011
|
6
6
|
bxslider-rails Author: Mauricio Natanael Ferreira.
|
7
7
|
|
8
8
|
### Extra info
|
9
9
|
|
10
|
-
bxSlider 4.2.
|
10
|
+
bxSlider 4.2.2 == bxslider-rails (4.2.2)
|
11
11
|
|
12
12
|
## Installation
|
13
13
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/***
|
2
|
-
* BxSlider v4.2.
|
2
|
+
* BxSlider v4.2.2 - Fully loaded, responsive content slider
|
3
3
|
* http://bxslider.com
|
4
4
|
*
|
5
5
|
* Copyright 2014, Steven Wanderski - http://stevenwanderski.com - http://bxcreative.com
|
@@ -10,8 +10,6 @@
|
|
10
10
|
|
11
11
|
;(function($){
|
12
12
|
|
13
|
-
var plugin = {};
|
14
|
-
|
15
13
|
var defaults = {
|
16
14
|
|
17
15
|
// GENERAL
|
@@ -43,6 +41,9 @@
|
|
43
41
|
preventDefaultSwipeX: true,
|
44
42
|
preventDefaultSwipeY: false,
|
45
43
|
|
44
|
+
// KEYBOARD
|
45
|
+
keyboardEnabled: false,
|
46
|
+
|
46
47
|
// PAGER
|
47
48
|
pager: true,
|
48
49
|
pagerType: 'full',
|
@@ -79,12 +80,12 @@
|
|
79
80
|
slideWidth: 0,
|
80
81
|
|
81
82
|
// CALLBACKS
|
82
|
-
onSliderLoad: function(){},
|
83
|
-
onSlideBefore: function(){},
|
84
|
-
onSlideAfter: function(){},
|
85
|
-
onSlideNext: function(){},
|
86
|
-
onSlidePrev: function(){},
|
87
|
-
onSliderResize: function(){}
|
83
|
+
onSliderLoad: function(){ return true },
|
84
|
+
onSlideBefore: function(){ return true },
|
85
|
+
onSlideAfter: function(){ return true },
|
86
|
+
onSlideNext: function(){ return true },
|
87
|
+
onSlidePrev: function(){ return true },
|
88
|
+
onSliderResize: function(){ return true }
|
88
89
|
};
|
89
90
|
|
90
91
|
$.fn.bxSlider = function(options){
|
@@ -105,7 +106,6 @@
|
|
105
106
|
var slider = {};
|
106
107
|
// set a reference to our slider element
|
107
108
|
var el = this;
|
108
|
-
plugin.el = this;
|
109
109
|
|
110
110
|
/**
|
111
111
|
* Makes slideshow responsive
|
@@ -140,7 +140,7 @@
|
|
140
140
|
// store active slide information
|
141
141
|
slider.active = { index: slider.settings.startSlide };
|
142
142
|
// store if the slider is in carousel mode (displaying / moving multiple slides)
|
143
|
-
slider.carousel = slider.settings.minSlides > 1 || slider.settings.maxSlides > 1 ?
|
143
|
+
slider.carousel = slider.settings.minSlides > 1 || slider.settings.maxSlides > 1 ? true : false;
|
144
144
|
// if carousel, force preloadImages = 'all'
|
145
145
|
if(slider.carousel){ slider.settings.preloadImages = 'all'; }
|
146
146
|
// calculate the min / max width thresholds based on min / max number of slides
|
@@ -197,7 +197,7 @@
|
|
197
197
|
// also strip any margin and padding from el
|
198
198
|
el.css({
|
199
199
|
width: slider.settings.mode === 'horizontal' ? (slider.children.length * 1000 + 215) + '%' : 'auto',
|
200
|
-
position: '
|
200
|
+
position: 'absolute'
|
201
201
|
});
|
202
202
|
// if using CSS, add the easing property
|
203
203
|
if(slider.usingCSS && slider.settings.easing){
|
@@ -217,7 +217,7 @@
|
|
217
217
|
maxWidth: getViewportMaxWidth()
|
218
218
|
});
|
219
219
|
// make modification to the wrapper (.bx-wrapper)
|
220
|
-
if(!slider.settings.pager){
|
220
|
+
if(!slider.settings.pager && !slider.settings.controls){
|
221
221
|
slider.viewport.parent().css({
|
222
222
|
margin: '0 auto 0px'
|
223
223
|
});
|
@@ -253,7 +253,7 @@
|
|
253
253
|
if(slider.settings.video){ el.fitVids(); }
|
254
254
|
// set the default preload selector (visible)
|
255
255
|
var preloadSelector = slider.children.eq(slider.settings.startSlide);
|
256
|
-
if(slider.settings.preloadImages === "all"){ preloadSelector = slider.children; }
|
256
|
+
if(slider.settings.preloadImages === "all" || slider.settings.ticker){ preloadSelector = slider.children; }
|
257
257
|
// only check for control addition if not in "ticker" mode
|
258
258
|
if(!slider.settings.ticker){
|
259
259
|
// if controls are requested, add them
|
@@ -268,19 +268,22 @@
|
|
268
268
|
} else {
|
269
269
|
slider.settings.pager = false;
|
270
270
|
}
|
271
|
-
// preload
|
272
|
-
|
271
|
+
// preload first image and apply height to viewport, then load all others and do final DOM / CSS modifications that depend on images being loaded
|
272
|
+
preloadSelector.find('img:not([src=""]), iframe').first().one('load error', function(){
|
273
|
+
slider.viewport.height($(this).height());
|
274
|
+
loadElements(preloadSelector, start);
|
275
|
+
});
|
273
276
|
};
|
274
277
|
|
275
278
|
var loadElements = function(selector, callback){
|
276
|
-
var total = selector.find('img, iframe').length;
|
279
|
+
var total = selector.find('img:not([src=""]), iframe').length;
|
277
280
|
if(total === 0){
|
278
281
|
callback();
|
279
282
|
return;
|
280
283
|
}
|
281
284
|
var count = 0;
|
282
|
-
selector.find('img, iframe').each(function(){
|
283
|
-
$(this).one('load', function(){
|
285
|
+
selector.find('img:not([src=""]), iframe').each(function(){
|
286
|
+
$(this).one('load error', function(){
|
284
287
|
if(++count === total){ callback(); }
|
285
288
|
}).each(function(){
|
286
289
|
if(this.complete){ $(this).load(); }
|
@@ -310,7 +313,7 @@
|
|
310
313
|
// make sure everything is positioned just right (same as a window resize)
|
311
314
|
el.redrawSlider();
|
312
315
|
// onSliderLoad callback
|
313
|
-
slider.settings.onSliderLoad(slider.active.index);
|
316
|
+
slider.settings.onSliderLoad(slider,slider.active.index);
|
314
317
|
// slider has been fully initialized
|
315
318
|
slider.initialized = true;
|
316
319
|
// bind the resize call to the window
|
@@ -325,6 +328,10 @@
|
|
325
328
|
if(slider.settings.controls){ updateDirectionControls(); }
|
326
329
|
// if touchEnabled is true, setup the touch events
|
327
330
|
if(slider.settings.touchEnabled && !slider.settings.ticker){ initTouch(); }
|
331
|
+
// if keyboardEnabled is true, setup the keyboard events
|
332
|
+
if (slider.settings.keyboardEnabled && !slider.settings.ticker) {
|
333
|
+
$(document).keydown(keyPress);
|
334
|
+
}
|
328
335
|
};
|
329
336
|
|
330
337
|
/**
|
@@ -432,7 +439,7 @@
|
|
432
439
|
// if viewport is smaller than minThreshold, return minSlides
|
433
440
|
if(slider.viewport.width() < slider.minThreshold){
|
434
441
|
slidesShowing = slider.settings.minSlides;
|
435
|
-
// if viewport is larger than
|
442
|
+
// if viewport is larger than maxThreshold, return maxSlides
|
436
443
|
}else if(slider.viewport.width() > slider.maxThreshold){
|
437
444
|
slidesShowing = slider.settings.maxSlides;
|
438
445
|
// if viewport is between min / max thresholds, divide viewport width by first child width
|
@@ -528,7 +535,7 @@
|
|
528
535
|
* @param value (int)
|
529
536
|
* - the animating property's value
|
530
537
|
*
|
531
|
-
* @param type (string) '
|
538
|
+
* @param type (string) 'slide', 'reset', 'ticker'
|
532
539
|
* - the type of instance for which the function is being
|
533
540
|
*
|
534
541
|
* @param duration (int)
|
@@ -545,14 +552,21 @@
|
|
545
552
|
// add the CSS transition-duration
|
546
553
|
el.css('-' + slider.cssPrefix + '-transition-duration', duration / 1000 + 's');
|
547
554
|
if(type === 'slide'){
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
555
|
+
setTimeout(function() {
|
556
|
+
// set the property value
|
557
|
+
el.css(slider.animProp, propValue);
|
558
|
+
// if value 0, just update
|
559
|
+
if(value === 0) {
|
560
|
+
updateAfterSlideTransition();
|
561
|
+
} else {
|
562
|
+
// bind a callback method - executes when CSS transition completes
|
563
|
+
el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){
|
564
|
+
// unbind the callback
|
565
|
+
el.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');
|
566
|
+
updateAfterSlideTransition();
|
567
|
+
});
|
568
|
+
}
|
569
|
+
}, 0);
|
556
570
|
}else if(type === 'reset'){
|
557
571
|
el.css(slider.animProp, propValue);
|
558
572
|
}else if(type === 'ticker'){
|
@@ -634,7 +648,7 @@
|
|
634
648
|
slider.pagerEl = $(slider.settings.pagerCustom);
|
635
649
|
}
|
636
650
|
// assign the pager click binding
|
637
|
-
slider.pagerEl.on('click', 'a', clickPagerBind);
|
651
|
+
slider.pagerEl.on('click touchend', 'a', clickPagerBind);
|
638
652
|
};
|
639
653
|
|
640
654
|
/**
|
@@ -644,8 +658,8 @@
|
|
644
658
|
slider.controls.next = $('<a class="bx-next" href="">' + slider.settings.nextText + '</a>');
|
645
659
|
slider.controls.prev = $('<a class="bx-prev" href="">' + slider.settings.prevText + '</a>');
|
646
660
|
// bind click actions to the controls
|
647
|
-
slider.controls.next.bind('click', clickNextBind);
|
648
|
-
slider.controls.prev.bind('click', clickPrevBind);
|
661
|
+
slider.controls.next.bind('click touchend', clickNextBind);
|
662
|
+
slider.controls.prev.bind('click touchend', clickPrevBind);
|
649
663
|
// if nextSelector was supplied, populate it
|
650
664
|
if(slider.settings.nextSelector){
|
651
665
|
$(slider.settings.nextSelector).append(slider.controls.next);
|
@@ -704,8 +718,8 @@
|
|
704
718
|
var title = $(this).find('img:first').attr('title');
|
705
719
|
// append the caption
|
706
720
|
if(title !== undefined && ('' + title).length){
|
707
|
-
|
708
|
-
|
721
|
+
$(this).append('<div class="bx-caption"><span>' + title + '</span></div>');
|
722
|
+
}
|
709
723
|
});
|
710
724
|
};
|
711
725
|
|
@@ -716,10 +730,13 @@
|
|
716
730
|
* - DOM event object
|
717
731
|
*/
|
718
732
|
var clickNextBind = function(e){
|
733
|
+
e.preventDefault();
|
734
|
+
if (slider.controls.el.hasClass('disabled')) {
|
735
|
+
return;
|
736
|
+
}
|
719
737
|
// if auto show is running, stop it
|
720
738
|
if(slider.settings.auto){ el.stopAuto(); }
|
721
739
|
el.goToNextSlide();
|
722
|
-
e.preventDefault();
|
723
740
|
};
|
724
741
|
|
725
742
|
/**
|
@@ -729,10 +746,13 @@
|
|
729
746
|
* - DOM event object
|
730
747
|
*/
|
731
748
|
var clickPrevBind = function(e){
|
749
|
+
e.preventDefault();
|
750
|
+
if (slider.controls.el.hasClass('disabled')) {
|
751
|
+
return;
|
752
|
+
}
|
732
753
|
// if auto show is running, stop it
|
733
754
|
if(slider.settings.auto){ el.stopAuto(); }
|
734
755
|
el.goToPrevSlide();
|
735
|
-
e.preventDefault();
|
736
756
|
};
|
737
757
|
|
738
758
|
/**
|
@@ -764,6 +784,10 @@
|
|
764
784
|
* - DOM event object
|
765
785
|
*/
|
766
786
|
var clickPagerBind = function(e){
|
787
|
+
e.preventDefault();
|
788
|
+
if (slider.controls.el.hasClass('disabled')) {
|
789
|
+
return;
|
790
|
+
}
|
767
791
|
// if auto show is running, stop it
|
768
792
|
if(slider.settings.auto){ el.stopAuto(); }
|
769
793
|
var pagerLink = $(e.currentTarget);
|
@@ -771,7 +795,6 @@
|
|
771
795
|
var pagerIndex = parseInt(pagerLink.attr('data-slide-index'));
|
772
796
|
// if clicked pager link is not active, continue with the goToSlide call
|
773
797
|
if(pagerIndex !== slider.active.index){ el.goToSlide(pagerIndex); }
|
774
|
-
e.preventDefault();
|
775
798
|
}
|
776
799
|
};
|
777
800
|
|
@@ -877,6 +900,15 @@
|
|
877
900
|
// if autoDelay was not supplied, start the auto show normally
|
878
901
|
}else{
|
879
902
|
el.startAuto();
|
903
|
+
|
904
|
+
//add focus and blur events to ensure its running if timeout gets paused
|
905
|
+
$(window).focus(function() {
|
906
|
+
el.startAuto();
|
907
|
+
}).blur(function() {
|
908
|
+
el.stopAuto();
|
909
|
+
});
|
910
|
+
|
911
|
+
|
880
912
|
}
|
881
913
|
// if autoHover is requested
|
882
914
|
if(slider.settings.autoHover){
|
@@ -921,24 +953,46 @@
|
|
921
953
|
slider.settings.controls = false;
|
922
954
|
slider.settings.autoControls = false;
|
923
955
|
// if autoHover is requested
|
924
|
-
if(slider.settings.tickerHover
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
956
|
+
if(slider.settings.tickerHover){
|
957
|
+
if(slider.usingCSS){
|
958
|
+
var value;
|
959
|
+
var idx = slider.settings.mode == 'horizontal' ? 4 : 5;
|
960
|
+
slider.viewport.hover(function(){
|
961
|
+
var transform = el.css('-' + slider.cssPrefix + '-transform');
|
962
|
+
value = parseFloat(transform.split(',')[idx]);
|
963
|
+
setPositionProperty(value, 'reset', 0);
|
964
|
+
}, function(){
|
965
|
+
var totalDimens = 0;
|
966
|
+
slider.children.each(function(index){
|
967
|
+
totalDimens += slider.settings.mode == 'horizontal' ? $(this).outerWidth(true) : $(this).outerHeight(true);
|
968
|
+
});
|
969
|
+
// calculate the speed ratio (used to determine the new speed to finish the paused animation)
|
970
|
+
var ratio = slider.settings.speed / totalDimens;
|
971
|
+
// determine which property to use
|
972
|
+
var property = slider.settings.mode == 'horizontal' ? 'left' : 'top';
|
973
|
+
// calculate the new speed
|
974
|
+
var newSpeed = ratio * (totalDimens - (Math.abs(parseInt(value))));
|
975
|
+
tickerLoop(newSpeed);
|
933
976
|
});
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
977
|
+
} else {
|
978
|
+
// on el hover
|
979
|
+
slider.viewport.hover(function(){
|
980
|
+
el.stop();
|
981
|
+
}, function(){
|
982
|
+
// calculate the total width of children (used to calculate the speed ratio)
|
983
|
+
var totalDimens = 0;
|
984
|
+
slider.children.each(function(index){
|
985
|
+
totalDimens += slider.settings.mode == 'horizontal' ? $(this).outerWidth(true) : $(this).outerHeight(true);
|
986
|
+
});
|
987
|
+
// calculate the speed ratio (used to determine the new speed to finish the paused animation)
|
988
|
+
var ratio = slider.settings.speed / totalDimens;
|
989
|
+
// determine which property to use
|
990
|
+
var property = slider.settings.mode == 'horizontal' ? 'left' : 'top';
|
991
|
+
// calculate the new speed
|
992
|
+
var newSpeed = ratio * (totalDimens - (Math.abs(parseInt(el.css(property)))));
|
993
|
+
tickerLoop(newSpeed);
|
994
|
+
});
|
995
|
+
}
|
942
996
|
}
|
943
997
|
// start the ticker loop
|
944
998
|
tickerLoop();
|
@@ -964,6 +1018,45 @@
|
|
964
1018
|
setPositionProperty(animateProperty, 'ticker', speed, params);
|
965
1019
|
};
|
966
1020
|
|
1021
|
+
/**
|
1022
|
+
* Check if el is on screen
|
1023
|
+
*/
|
1024
|
+
var isOnScreen = function(el){
|
1025
|
+
var win = $(window);
|
1026
|
+
var viewport = {
|
1027
|
+
top : win.scrollTop(),
|
1028
|
+
left : win.scrollLeft()
|
1029
|
+
};
|
1030
|
+
viewport.right = viewport.left + win.width();
|
1031
|
+
viewport.bottom = viewport.top + win.height();
|
1032
|
+
|
1033
|
+
var bounds = el.offset();
|
1034
|
+
bounds.right = bounds.left + el.outerWidth();
|
1035
|
+
bounds.bottom = bounds.top + el.outerHeight();
|
1036
|
+
|
1037
|
+
return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom));
|
1038
|
+
};
|
1039
|
+
|
1040
|
+
/**
|
1041
|
+
* Initializes keyboard events
|
1042
|
+
*/
|
1043
|
+
var keyPress = function(e){
|
1044
|
+
var activeElementTag = document.activeElement.tagName.toLowerCase();
|
1045
|
+
var tagFilters='input|textarea';
|
1046
|
+
var p = new RegExp(activeElementTag,["i"]);
|
1047
|
+
var result = p.exec(tagFilters);
|
1048
|
+
if (result == null && isOnScreen(el)) {
|
1049
|
+
if (e.keyCode == 39) {
|
1050
|
+
clickNextBind(e);
|
1051
|
+
return false;
|
1052
|
+
}
|
1053
|
+
else if (e.keyCode == 37) {
|
1054
|
+
clickPrevBind(e);
|
1055
|
+
return false;
|
1056
|
+
}
|
1057
|
+
}
|
1058
|
+
};
|
1059
|
+
|
967
1060
|
/**
|
968
1061
|
* Initializes touch events
|
969
1062
|
*/
|
@@ -973,7 +1066,16 @@
|
|
973
1066
|
start: {x: 0, y: 0},
|
974
1067
|
end: {x: 0, y: 0}
|
975
1068
|
};
|
976
|
-
slider.viewport.bind('touchstart', onTouchStart);
|
1069
|
+
slider.viewport.bind('touchstart MSPointerDown pointerdown', onTouchStart);
|
1070
|
+
|
1071
|
+
//for browsers that have implemented pointer events and fire a click after
|
1072
|
+
//every pointerup regardless of whether pointerup is on same screen location as pointerdown or not
|
1073
|
+
slider.viewport.on('click', '.bxslider a', function(e) {
|
1074
|
+
if (slider.viewport.hasClass('click-disabled')) {
|
1075
|
+
e.preventDefault();
|
1076
|
+
slider.viewport.removeClass('click-disabled');
|
1077
|
+
}
|
1078
|
+
});
|
977
1079
|
};
|
978
1080
|
|
979
1081
|
/**
|
@@ -983,22 +1085,54 @@
|
|
983
1085
|
* - DOM event object
|
984
1086
|
*/
|
985
1087
|
var onTouchStart = function(e){
|
1088
|
+
//disable slider controls while user is interacting with slides to avoid slider freeze that happens on touch devices when a slide swipe happens immediately after interacting with slider controls
|
1089
|
+
slider.controls.el.addClass('disabled');
|
1090
|
+
|
986
1091
|
if(slider.working){
|
987
1092
|
e.preventDefault();
|
1093
|
+
slider.controls.el.removeClass('disabled');
|
988
1094
|
}else{
|
989
1095
|
// record the original position when touch starts
|
990
1096
|
slider.touch.originalPos = el.position();
|
991
1097
|
var orig = e.originalEvent;
|
1098
|
+
var touchPoints = (typeof orig.changedTouches != 'undefined') ? orig.changedTouches : [orig];
|
992
1099
|
// record the starting touch x, y coordinates
|
993
|
-
slider.touch.start.x =
|
994
|
-
slider.touch.start.y =
|
1100
|
+
slider.touch.start.x = touchPoints[0].pageX;
|
1101
|
+
slider.touch.start.y = touchPoints[0].pageY;
|
1102
|
+
|
1103
|
+
if (slider.viewport.get(0).setPointerCapture) {
|
1104
|
+
slider.pointerId = orig.pointerId;
|
1105
|
+
slider.viewport.get(0).setPointerCapture(slider.pointerId);
|
1106
|
+
}
|
995
1107
|
// bind a "touchmove" event to the viewport
|
996
|
-
slider.viewport.bind('touchmove', onTouchMove);
|
1108
|
+
slider.viewport.bind('touchmove MSPointerMove pointermove', onTouchMove);
|
997
1109
|
// bind a "touchend" event to the viewport
|
998
|
-
slider.viewport.bind('touchend', onTouchEnd);
|
1110
|
+
slider.viewport.bind('touchend MSPointerUp pointerup', onTouchEnd);
|
1111
|
+
slider.viewport.bind('MSPointerCancel pointercancel', onPointerCancel);
|
999
1112
|
}
|
1000
1113
|
};
|
1001
1114
|
|
1115
|
+
/**
|
1116
|
+
* Cancel Pointer for Windows Phone
|
1117
|
+
*
|
1118
|
+
* @param e (event)
|
1119
|
+
* - DOM event object
|
1120
|
+
*/
|
1121
|
+
var onPointerCancel = function(e) {
|
1122
|
+
/* onPointerCancel handler is needed to deal with situations when a touchend
|
1123
|
+
doesn't fire after a touchstart (this happens on windows phones only) */
|
1124
|
+
setPositionProperty(slider.touch.originalPos.left, 'reset', 0);
|
1125
|
+
|
1126
|
+
//remove handlers
|
1127
|
+
slider.controls.el.removeClass('disabled');
|
1128
|
+
slider.viewport.unbind('MSPointerCancel pointercancel', onPointerCancel);
|
1129
|
+
slider.viewport.unbind('touchmove MSPointerMove pointermove', onTouchMove);
|
1130
|
+
slider.viewport.unbind('touchend MSPointerUp pointerup', onTouchEnd);
|
1131
|
+
if (slider.viewport.get(0).releasePointerCapture) {
|
1132
|
+
slider.viewport.get(0).releasePointerCapture(slider.pointerId);
|
1133
|
+
}
|
1134
|
+
}
|
1135
|
+
|
1002
1136
|
/**
|
1003
1137
|
* Event handler for "touchmove"
|
1004
1138
|
*
|
@@ -1007,9 +1141,10 @@
|
|
1007
1141
|
*/
|
1008
1142
|
var onTouchMove = function(e){
|
1009
1143
|
var orig = e.originalEvent;
|
1144
|
+
var touchPoints = (typeof orig.changedTouches != 'undefined') ? orig.changedTouches : [orig];
|
1010
1145
|
// if scrolling on y axis, do not prevent default
|
1011
|
-
var xMovement = Math.abs(
|
1012
|
-
var yMovement = Math.abs(
|
1146
|
+
var xMovement = Math.abs(touchPoints[0].pageX - slider.touch.start.x);
|
1147
|
+
var yMovement = Math.abs(touchPoints[0].pageY - slider.touch.start.y);
|
1013
1148
|
// x axis swipe
|
1014
1149
|
if((xMovement * 3) > yMovement && slider.settings.preventDefaultSwipeX){
|
1015
1150
|
e.preventDefault();
|
@@ -1021,11 +1156,11 @@
|
|
1021
1156
|
var value = 0, change = 0;
|
1022
1157
|
// if horizontal, drag along x axis
|
1023
1158
|
if(slider.settings.mode === 'horizontal'){
|
1024
|
-
change =
|
1159
|
+
change = touchPoints[0].pageX - slider.touch.start.x;
|
1025
1160
|
value = slider.touch.originalPos.left + change;
|
1026
1161
|
// if vertical, drag along y axis
|
1027
1162
|
}else{
|
1028
|
-
change =
|
1163
|
+
change = touchPoints[0].pageY - slider.touch.start.y;
|
1029
1164
|
value = slider.touch.originalPos.top + change;
|
1030
1165
|
}
|
1031
1166
|
setPositionProperty(value, 'reset', 0);
|
@@ -1039,13 +1174,16 @@
|
|
1039
1174
|
* - DOM event object
|
1040
1175
|
*/
|
1041
1176
|
var onTouchEnd = function(e){
|
1042
|
-
slider.viewport.unbind('touchmove', onTouchMove);
|
1177
|
+
slider.viewport.unbind('touchmove MSPointerMove pointermove', onTouchMove);
|
1178
|
+
//enable slider controls as soon as user stops interacing with slides
|
1179
|
+
slider.controls.el.removeClass('disabled');
|
1043
1180
|
var orig = e.originalEvent;
|
1181
|
+
var touchPoints = (typeof orig.changedTouches != 'undefined') ? orig.changedTouches : [orig];
|
1044
1182
|
var value = 0;
|
1045
1183
|
var distance = 0;
|
1046
1184
|
// record end x, y positions
|
1047
|
-
slider.touch.end.x =
|
1048
|
-
slider.touch.end.y =
|
1185
|
+
slider.touch.end.x = touchPoints[0].pageX;
|
1186
|
+
slider.touch.end.y = touchPoints[0].pageY;
|
1049
1187
|
// if fade mode, check if absolute x distance clears the threshold
|
1050
1188
|
if(slider.settings.mode === 'fade'){
|
1051
1189
|
distance = Math.abs(slider.touch.start.x - slider.touch.end.x);
|
@@ -1085,7 +1223,10 @@
|
|
1085
1223
|
}
|
1086
1224
|
}
|
1087
1225
|
}
|
1088
|
-
slider.viewport.unbind('touchend', onTouchEnd);
|
1226
|
+
slider.viewport.unbind('touchend MSPointerUp pointerup', onTouchEnd);
|
1227
|
+
if (slider.viewport.get(0).releasePointerCapture) {
|
1228
|
+
slider.viewport.get(0).releasePointerCapture(slider.pointerId);
|
1229
|
+
}
|
1089
1230
|
};
|
1090
1231
|
|
1091
1232
|
/**
|
@@ -1094,20 +1235,25 @@
|
|
1094
1235
|
var resizeWindow = function(e){
|
1095
1236
|
// don't do anything if slider isn't initialized.
|
1096
1237
|
if(!slider.initialized){ return; }
|
1097
|
-
//
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
//
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1238
|
+
// Delay if slider working.
|
1239
|
+
if (slider.working) {
|
1240
|
+
window.setTimeout(resizeWindow, 10);
|
1241
|
+
} else {
|
1242
|
+
// get the new window dimens (again, thank you IE)
|
1243
|
+
var windowWidthNew = $(window).width();
|
1244
|
+
var windowHeightNew = $(window).height();
|
1245
|
+
// make sure that it is a true window resize
|
1246
|
+
// *we must check this because our dinosaur friend IE fires a window resize event when certain DOM elements
|
1247
|
+
// are resized. Can you just die already?*
|
1248
|
+
if(windowWidth !== windowWidthNew || windowHeight !== windowHeightNew){
|
1249
|
+
// set the new window dimens
|
1250
|
+
windowWidth = windowWidthNew;
|
1251
|
+
windowHeight = windowHeightNew;
|
1252
|
+
// update all dynamic elements
|
1253
|
+
el.redrawSlider();
|
1254
|
+
// Call user resize handler
|
1255
|
+
slider.settings.onSliderResize.call(el, slider.active.index);
|
1256
|
+
}
|
1111
1257
|
}
|
1112
1258
|
};
|
1113
1259
|
|
@@ -1144,12 +1290,35 @@
|
|
1144
1290
|
slider.active.index = slideIndex;
|
1145
1291
|
}
|
1146
1292
|
// onSlideBefore, onSlideNext, onSlidePrev callbacks
|
1147
|
-
|
1293
|
+
// Allow transition canceling based on returned value
|
1294
|
+
var performTransition = true;
|
1295
|
+
|
1296
|
+
performTransition = slider.settings.onSlideBefore(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
|
1297
|
+
|
1298
|
+
if ( typeof(performTransition) !== "undefined" && !performTransition ) {
|
1299
|
+
slider.active.index = slider.oldIndex; // restore old index
|
1300
|
+
slider.working = false; // is not in motion
|
1301
|
+
return;
|
1302
|
+
}
|
1148
1303
|
if(direction === 'next'){
|
1149
|
-
|
1304
|
+
// Prevent canceling in future functions or lack there-of from negating previous commands to cancel
|
1305
|
+
if(!slider.settings.onSlideNext(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index)){
|
1306
|
+
performTransition = false;
|
1307
|
+
}
|
1150
1308
|
}else if(direction === 'prev'){
|
1151
|
-
|
1309
|
+
// Prevent canceling in future functions or lack there-of from negating previous commands to cancel
|
1310
|
+
if(!slider.settings.onSlidePrev(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index)){
|
1311
|
+
performTransition = false;
|
1312
|
+
}
|
1152
1313
|
}
|
1314
|
+
|
1315
|
+
// If transitions canceled, reset and return
|
1316
|
+
if ( typeof(performTransition) !== "undefined" && !performTransition ) {
|
1317
|
+
slider.active.index = slider.oldIndex; // restore old index
|
1318
|
+
slider.working = false; // is not in motion
|
1319
|
+
return;
|
1320
|
+
}
|
1321
|
+
|
1153
1322
|
// check if last slide
|
1154
1323
|
slider.active.last = slider.active.index >= getPagerQty() - 1;
|
1155
1324
|
// update the pager with active class
|
@@ -1208,6 +1377,7 @@
|
|
1208
1377
|
position = slider.children.eq(requestEl).position();
|
1209
1378
|
}
|
1210
1379
|
|
1380
|
+
|
1211
1381
|
/* If the position doesn't exist
|
1212
1382
|
* (e.g. if you destroy the slider on a next click),
|
1213
1383
|
* it doesn't throw an error.
|
@@ -1298,6 +1468,13 @@
|
|
1298
1468
|
return slider.children.length;
|
1299
1469
|
};
|
1300
1470
|
|
1471
|
+
/**
|
1472
|
+
* Return slider.working variable
|
1473
|
+
*/
|
1474
|
+
el.isWorking = function() {
|
1475
|
+
return slider.working;
|
1476
|
+
}
|
1477
|
+
|
1301
1478
|
/**
|
1302
1479
|
* Update all dynamic slider elements
|
1303
1480
|
*/
|
@@ -1307,7 +1484,7 @@
|
|
1307
1484
|
// adjust the height
|
1308
1485
|
slider.viewport.css('height', getViewportHeight());
|
1309
1486
|
// update the slide position
|
1310
|
-
if(!slider.settings.ticker) { setSlidePosition(); }
|
1487
|
+
if(!slider.settings.ticker) { setSlidePosition(); }
|
1311
1488
|
// if active.last was true before the screen resize, we want
|
1312
1489
|
// to keep it last no matter what screen size we end on
|
1313
1490
|
if (slider.active.last) { slider.active.index = getPagerQty() - 1; }
|
@@ -1349,6 +1526,7 @@
|
|
1349
1526
|
if(slider.controls.autoEl){ slider.controls.autoEl.remove(); }
|
1350
1527
|
clearInterval(slider.interval);
|
1351
1528
|
if(slider.settings.responsive){ $(window).unbind('resize', resizeWindow); }
|
1529
|
+
if(slider.settings.keyboardEnabled){ $(document).unbind('keydown', keyPress); }
|
1352
1530
|
};
|
1353
1531
|
|
1354
1532
|
/**
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/***
|
2
|
-
* BxSlider v4.2.
|
2
|
+
* BxSlider v4.2.2 - Fully loaded, responsive content slider
|
3
3
|
* http://bxslider.com
|
4
4
|
*
|
5
5
|
* Written by: Steven Wanderski, 2014
|
@@ -16,6 +16,8 @@
|
|
16
16
|
margin: 0 auto 60px;
|
17
17
|
padding: 0;
|
18
18
|
*zoom: 1;
|
19
|
+
-ms-touch-action: pan-y;
|
20
|
+
touch-action: pan-y;
|
19
21
|
}
|
20
22
|
.bx-wrapper img {
|
21
23
|
max-width: 100%;
|
@@ -25,6 +27,9 @@
|
|
25
27
|
margin: 0;
|
26
28
|
padding: 0;
|
27
29
|
}
|
30
|
+
ul.bxslider {
|
31
|
+
list-style: none;
|
32
|
+
}
|
28
33
|
.bx-viewport {
|
29
34
|
/*fix other elements on the page moving (on Chrome)*/
|
30
35
|
-webkit-transform: translatez(0);
|
@@ -84,6 +89,10 @@
|
|
84
89
|
*zoom: 1;
|
85
90
|
*display: inline;
|
86
91
|
}
|
92
|
+
.bx-wrapper .bx-pager-item {
|
93
|
+
font-size: 0;
|
94
|
+
line-height: 0;
|
95
|
+
}
|
87
96
|
/* DIRECTION CONTROLS (NEXT / PREV) */
|
88
97
|
.bx-wrapper .bx-prev {
|
89
98
|
left: 10px;
|