slider.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /*
  2. SliderJS - jQuery Slider with CSS Transitions
  3. */
  4. var supports = (function () {
  5. 'use strict';
  6. var style = document.createElement('div').style,
  7. vendors = ['', 'Moz', 'Webkit', 'Khtml', 'O', 'ms'],
  8. prefix, i, l;
  9. return function (prop) {
  10. if (typeof style[prop] === 'string') {
  11. return true;
  12. }
  13. prop = prop.replace(/^[a-z]/, function (val) {
  14. return val.toUpperCase();
  15. });
  16. for (i = 0, l = vendors.length; i < l; i += 1) {
  17. prefix = vendors[i] + prop;
  18. if (typeof style[prefix] === 'string') {
  19. return true;
  20. }
  21. }
  22. return false;
  23. };
  24. })();
  25. var Slider = (function ($) {
  26. 'use strict';
  27. /*global jQuery, setTimeout, clearTimeout*/
  28. var module = {
  29. npos: 0,
  30. timer: null,
  31. config: function (config) {
  32. module.target = config.target;
  33. module.container = module.target.find('.slider-wrapper');
  34. module.sWidth = module.container.find('.slide').outerWidth(true);
  35. module.max = module.container.find('.slide').length;
  36. module.tWidth = module.sWidth * module.max;
  37. module.time = config.time || 5000;
  38. },
  39. early: function () {
  40. var self = this,
  41. slider = self.target,
  42. i, l;
  43. self.container.css({ width: self.tWidth });
  44. slider.append(self.pager());
  45. for (i = 0, l = self.max; i < l; i += 1) {
  46. self.items(i + 1).insertBefore($('.slider-nav .next').parents('li'));
  47. }
  48. slider.find('.bullet:first').addClass('active');
  49. },
  50. events: function () {
  51. var self = this,
  52. slider = self.target;
  53. slider.on('click', '.slider-nav .btn', function (e) {
  54. e.preventDefault();
  55. var $this = $(this),
  56. index = $this.attr("data-index");
  57. if ($this.hasClass('next')) {
  58. self.next();
  59. }
  60. if ($this.hasClass('prev')) {
  61. self.prev();
  62. }
  63. if ($this.hasClass('bullet')) {
  64. self.bullets(index);
  65. self.update();
  66. }
  67. });
  68. self.container.on({
  69. mouseenter: function () {
  70. clearTimeout(self.timer);
  71. },
  72. mouseleave: function () {
  73. module.auto();
  74. }
  75. });
  76. },
  77. slip: function () {
  78. if (supports('transition')) {
  79. module.container.css({ left: -module.npos * module.sWidth });
  80. } else {
  81. module.container.animate({ left: -module.npos * module.sWidth }, 800);
  82. }
  83. },
  84. bullets: function (index) {
  85. clearTimeout(module.timer);
  86. module.auto();
  87. module.npos = parseInt(index, null) - 1;
  88. module.slip();
  89. },
  90. prev: function () {
  91. clearTimeout(module.timer);
  92. module.auto();
  93. module.npos -= 1;
  94. if (module.npos < 0) {
  95. module.npos = module.max - 1;
  96. }
  97. module.slip();
  98. module.update();
  99. },
  100. next: function () {
  101. clearTimeout(module.timer);
  102. module.auto();
  103. module.npos += 1;
  104. if (module.npos > (module.max - 1)) {
  105. module.npos = 0;
  106. }
  107. module.slip();
  108. module.update();
  109. },
  110. update: function () {
  111. var self = this,
  112. slider = self.target;
  113. slider.find('.bullet').removeClass('active');
  114. slider.find('.bullet').eq(self.npos).addClass('active');
  115. //LLH 添加轮播触发回调事件
  116. updateSliderCallback(self.npos);
  117. },
  118. auto: function () {
  119. var self = this;
  120. self.timer = setTimeout(self.next, self.time);
  121. },
  122. pager: function () {
  123. var nav = $('<ul class="slider-nav"><li><a href="#" class="control prev">Prev</a></li><li><a href="#" class="control next">Next</a></li></ul>');
  124. return nav;
  125. },
  126. items: function (i) {
  127. var item = $('<li><a class="bullet" href="#">' + i + '</a></li>');
  128. return item;
  129. },
  130. init: function (config) {
  131. var self = this;
  132. module.config(config);
  133. if (!module.max || module.max === 1) {
  134. return;
  135. }
  136. module.auto();
  137. module.events();
  138. module.early();
  139. return module;
  140. }
  141. };
  142. return {
  143. init: module.init
  144. };
  145. }(jQuery));