dots.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  2. import { createVNode as _createVNode } from "vue";
  3. import classnames from '../_util/classNames';
  4. import { cloneElement } from '../_util/vnode';
  5. import { clamp } from './utils/innerSliderUtils';
  6. const getDotCount = function (spec) {
  7. let dots;
  8. if (spec.infinite) {
  9. dots = Math.ceil(spec.slideCount / spec.slidesToScroll);
  10. } else {
  11. dots = Math.ceil((spec.slideCount - spec.slidesToShow) / spec.slidesToScroll) + 1;
  12. }
  13. return dots;
  14. };
  15. const Dots = (_, _ref) => {
  16. let {
  17. attrs
  18. } = _ref;
  19. const {
  20. slideCount,
  21. slidesToScroll,
  22. slidesToShow,
  23. infinite,
  24. currentSlide,
  25. appendDots,
  26. customPaging,
  27. clickHandler,
  28. dotsClass,
  29. onMouseenter,
  30. onMouseover,
  31. onMouseleave
  32. } = attrs;
  33. const dotCount = getDotCount({
  34. slideCount,
  35. slidesToScroll,
  36. slidesToShow,
  37. infinite
  38. });
  39. // Apply join & split to Array to pre-fill it for IE8
  40. //
  41. // Credit: http://stackoverflow.com/a/13735425/1849458
  42. const mouseEvents = {
  43. onMouseenter,
  44. onMouseover,
  45. onMouseleave
  46. };
  47. let dots = [];
  48. for (let i = 0; i < dotCount; i++) {
  49. const _rightBound = (i + 1) * slidesToScroll - 1;
  50. const rightBound = infinite ? _rightBound : clamp(_rightBound, 0, slideCount - 1);
  51. const _leftBound = rightBound - (slidesToScroll - 1);
  52. const leftBound = infinite ? _leftBound : clamp(_leftBound, 0, slideCount - 1);
  53. const className = classnames({
  54. 'slick-active': infinite ? currentSlide >= leftBound && currentSlide <= rightBound : currentSlide === leftBound
  55. });
  56. const dotOptions = {
  57. message: 'dots',
  58. index: i,
  59. slidesToScroll,
  60. currentSlide
  61. };
  62. function onClick(e) {
  63. // In Autoplay the focus stays on clicked button even after transition
  64. // to next slide. That only goes away by click somewhere outside
  65. if (e) {
  66. e.preventDefault();
  67. }
  68. clickHandler(dotOptions);
  69. }
  70. dots = dots.concat(_createVNode("li", {
  71. "key": i,
  72. "class": className
  73. }, [cloneElement(customPaging({
  74. i
  75. }), {
  76. onClick
  77. })]));
  78. }
  79. return cloneElement(appendDots({
  80. dots
  81. }), _extends({
  82. class: dotsClass
  83. }, mouseEvents));
  84. };
  85. Dots.inheritAttrs = false;
  86. export default Dots;