Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

3 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. 'use strict';
  2. exports.__esModule = true;
  3. exports.getTrackLeft = exports.getTrackAnimateCSS = exports.getTrackCSS = undefined;
  4. var _reactDom = require('react-dom');
  5. var _reactDom2 = _interopRequireDefault(_reactDom);
  6. var _objectAssign = require('object-assign');
  7. var _objectAssign2 = _interopRequireDefault(_objectAssign);
  8. var _trackUtils = require('../utils/trackUtils');
  9. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  10. // checks if spec is the superset of keys in keysArray, i.e., spec contains all the keys from keysArray
  11. var checkSpecKeys = function checkSpecKeys(spec, keysArray) {
  12. return keysArray.reduce(function (value, key) {
  13. return value && spec.hasOwnProperty(key);
  14. }, true) ? null : console.error('Keys Missing', spec);
  15. };
  16. var getTrackCSS = exports.getTrackCSS = function getTrackCSS(spec) {
  17. checkSpecKeys(spec, ['left', 'variableWidth', 'slideCount', 'slidesToShow', 'slideWidth']);
  18. var trackWidth, trackHeight;
  19. var trackChildren = spec.slideCount + 2 * spec.slidesToShow; // this should probably be getTotalSlides
  20. if (!spec.vertical) {
  21. trackWidth = (0, _trackUtils.getTotalSlides)(spec) * spec.slideWidth;
  22. } else {
  23. trackHeight = trackChildren * spec.slideHeight;
  24. }
  25. var style = {
  26. opacity: 1,
  27. WebkitTransform: !spec.vertical ? 'translate3d(' + spec.left + 'px, 0px, 0px)' : 'translate3d(0px, ' + spec.left + 'px, 0px)',
  28. transform: !spec.vertical ? 'translate3d(' + spec.left + 'px, 0px, 0px)' : 'translate3d(0px, ' + spec.left + 'px, 0px)',
  29. transition: '',
  30. WebkitTransition: '',
  31. msTransform: !spec.vertical ? 'translateX(' + spec.left + 'px)' : 'translateY(' + spec.left + 'px)'
  32. };
  33. if (spec.fade) {
  34. style = {
  35. opacity: 1
  36. };
  37. }
  38. if (trackWidth) {
  39. (0, _objectAssign2.default)(style, { width: trackWidth });
  40. }
  41. if (trackHeight) {
  42. (0, _objectAssign2.default)(style, { height: trackHeight });
  43. }
  44. // Fallback for IE8
  45. if (window && !window.addEventListener && window.attachEvent) {
  46. if (!spec.vertical) {
  47. style.marginLeft = spec.left + 'px';
  48. } else {
  49. style.marginTop = spec.left + 'px';
  50. }
  51. }
  52. return style;
  53. };
  54. var getTrackAnimateCSS = exports.getTrackAnimateCSS = function getTrackAnimateCSS(spec) {
  55. checkSpecKeys(spec, ['left', 'variableWidth', 'slideCount', 'slidesToShow', 'slideWidth', 'speed', 'cssEase']);
  56. var style = getTrackCSS(spec);
  57. // useCSS is true by default so it can be undefined
  58. style.WebkitTransition = '-webkit-transform ' + spec.speed + 'ms ' + spec.cssEase;
  59. style.transition = 'transform ' + spec.speed + 'ms ' + spec.cssEase;
  60. return style;
  61. };
  62. // gets total length of track that's on the left side of current slide
  63. var getTrackLeft = exports.getTrackLeft = function getTrackLeft(spec) {
  64. if (spec.unslick) {
  65. return 0;
  66. }
  67. checkSpecKeys(spec, ['slideIndex', 'trackRef', 'infinite', 'centerMode', 'slideCount', 'slidesToShow', 'slidesToScroll', 'slideWidth', 'listWidth', 'variableWidth', 'slideHeight']);
  68. var slideIndex = spec.slideIndex,
  69. trackRef = spec.trackRef,
  70. infinite = spec.infinite,
  71. centerMode = spec.centerMode,
  72. slideCount = spec.slideCount,
  73. slidesToShow = spec.slidesToShow,
  74. slidesToScroll = spec.slidesToScroll,
  75. slideWidth = spec.slideWidth,
  76. listWidth = spec.listWidth,
  77. variableWidth = spec.variableWidth,
  78. slideHeight = spec.slideHeight,
  79. fade = spec.fade,
  80. vertical = spec.vertical;
  81. var slideOffset = 0;
  82. var targetLeft;
  83. var targetSlide;
  84. var verticalOffset = 0;
  85. if (fade || spec.slideCount === 1) {
  86. return 0;
  87. }
  88. var slidesToOffset = 0;
  89. if (infinite) {
  90. slidesToOffset = -(0, _trackUtils.getPreClones)(spec); // bring active slide to the beginning of visual area
  91. // if next scroll doesn't have enough children, just reach till the end of original slides instead of shifting slidesToScroll children
  92. if (slideCount % slidesToScroll !== 0 && slideIndex + slidesToScroll > slideCount) {
  93. slidesToOffset = -(slideIndex > slideCount ? slidesToShow - (slideIndex - slideCount) : slideCount % slidesToScroll);
  94. }
  95. // shift current slide to center of the frame
  96. if (centerMode) {
  97. slidesToOffset += parseInt(slidesToShow / 2);
  98. }
  99. } else {
  100. if (slideCount % slidesToScroll !== 0 && slideIndex + slidesToScroll > slideCount) {
  101. slidesToOffset = slidesToShow - slideCount % slidesToScroll;
  102. }
  103. if (centerMode) {
  104. slidesToOffset = parseInt(slidesToShow / 2);
  105. }
  106. }
  107. slideOffset = slidesToOffset * slideWidth;
  108. verticalOffset = slidesToOffset * slideHeight;
  109. if (!vertical) {
  110. targetLeft = slideIndex * slideWidth * -1 + slideOffset;
  111. } else {
  112. targetLeft = slideIndex * slideHeight * -1 + verticalOffset;
  113. }
  114. if (variableWidth === true) {
  115. var targetSlideIndex;
  116. var lastSlide = _reactDom2.default.findDOMNode(trackRef).children[slideCount - 1];
  117. targetSlideIndex = slideIndex + (0, _trackUtils.getPreClones)(spec);
  118. targetSlide = _reactDom2.default.findDOMNode(trackRef).childNodes[targetSlideIndex];
  119. targetLeft = targetSlide ? targetSlide.offsetLeft * -1 : 0;
  120. if (centerMode === true) {
  121. targetSlideIndex = infinite ? slideIndex + (0, _trackUtils.getPreClones)(spec) : slideIndex;
  122. targetSlide = _reactDom2.default.findDOMNode(trackRef).children[targetSlideIndex];
  123. targetLeft = 0;
  124. for (var slide = 0; slide < targetSlideIndex; slide++) {
  125. targetLeft -= _reactDom2.default.findDOMNode(trackRef).children[slide].offsetWidth;
  126. }
  127. targetLeft -= parseInt(spec.centerPadding);
  128. targetLeft += (listWidth - targetSlide.offsetWidth) / 2;
  129. }
  130. }
  131. return targetLeft;
  132. };