jq.Slide.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /**
  2. * @author
  3. */
  4. (function($){
  5. $.fn.Slide=function(options){
  6. var opts = $.extend({},$.fn.Slide.deflunt,options);
  7. var index=1;
  8. var targetLi = $("." + opts.claNav + " li", $(this));//目标对象
  9. var clickNext = $("." + opts.claNav + " .next", $(this));//点击下一个按钮
  10. var clickPrev = $("." + opts.claNav + " .prev", $(this));//点击上一个按钮
  11. var ContentBox = $("." + opts.claCon , $(this));//滚动的对象
  12. var ContentBoxNum=ContentBox.children().size();//滚动对象的子元素个数
  13. var slideH=ContentBox.children().first().height();//滚动对象的子元素个数高度,相当于滚动的高度
  14. var slideW=ContentBox.children().first().width();//滚动对象的子元素宽度,相当于滚动的宽度
  15. var autoPlay;
  16. var slideWH;
  17. if(opts.effect=="scroolY"||opts.effect=="scroolTxt"){
  18. slideWH=slideH;
  19. }else if(opts.effect=="scroolX"||opts.effect=="scroolLoop"){
  20. ContentBox.css("width",ContentBoxNum*slideW);
  21. slideWH=slideW;
  22. }else if(opts.effect=="fade"){
  23. ContentBox.children().first().css("z-index","1");
  24. }
  25. return this.each(function() {
  26. var $this=$(this);
  27. //滚动函数
  28. var doPlay=function(){
  29. $.fn.Slide.effect[opts.effect](ContentBox, targetLi, index, slideWH, opts);
  30. index++;
  31. if (index*opts.steps >= ContentBoxNum) {
  32. index = 0;
  33. }
  34. };
  35. clickNext.click(function(event){
  36. $.fn.Slide.effectLoop.scroolLeft(ContentBox, targetLi, index, slideWH, opts,function(){
  37. for(var i=0;i<opts.steps;i++){
  38. ContentBox.find("li:first",$this).appendTo(ContentBox);
  39. }
  40. ContentBox.css({"left":"0"});
  41. });
  42. event.preventDefault();
  43. });
  44. clickPrev.click(function(event){
  45. for(var i=0;i<opts.steps;i++){
  46. ContentBox.find("li:last").prependTo(ContentBox);
  47. }
  48. ContentBox.css({"left":-index*opts.steps*slideW});
  49. $.fn.Slide.effectLoop.scroolRight(ContentBox, targetLi, index, slideWH, opts);
  50. event.preventDefault();
  51. });
  52. //自动播放
  53. if (opts.autoPlay) {
  54. autoPlay = setInterval(doPlay, opts.timer);
  55. ContentBox.hover(function(){
  56. if(autoPlay){
  57. clearInterval(autoPlay);
  58. }
  59. },function(){
  60. if(autoPlay){
  61. clearInterval(autoPlay);
  62. }
  63. autoPlay=setInterval(doPlay, opts.timer);
  64. });
  65. }
  66. //目标事件
  67. targetLi.hover(function(){
  68. if(autoPlay){
  69. clearInterval(autoPlay);
  70. }
  71. index=targetLi.index(this);
  72. window.setTimeout(function(){$.fn.Slide.effect[opts.effect](ContentBox, targetLi, index, slideWH, opts);},200);
  73. },function(){
  74. if(autoPlay){
  75. clearInterval(autoPlay);
  76. }
  77. autoPlay = setInterval(doPlay, opts.timer);
  78. });
  79. });
  80. };
  81. $.fn.Slide.deflunt={
  82. effect : "scroolY",
  83. autoPlay:true,
  84. speed : "normal",
  85. timer : 1000,
  86. defIndex : 0,
  87. claNav:"JQ-slide-nav",
  88. claCon:"JQ-slide-content",
  89. steps:1
  90. };
  91. $.fn.Slide.effectLoop={
  92. scroolLeft:function(contentObj,navObj,i,slideW,opts,callback){
  93. contentObj.animate({"left":-i*opts.steps*slideW},opts.speed,callback);
  94. if (navObj) {
  95. navObj.eq(i).addClass("on").siblings().removeClass("on");
  96. }
  97. },
  98. scroolRight:function(contentObj,navObj,i,slideW,opts,callback){
  99. contentObj.stop().animate({"left":0},opts.speed,callback);
  100. }
  101. }
  102. $.fn.Slide.effect={
  103. fade:function(contentObj,navObj,i,slideW,opts){
  104. contentObj.children().eq(i).stop().animate({opacity:1},opts.speed).css({"z-index": "1"}).siblings().animate({opacity: 0},opts.speed).css({"z-index":"0"});
  105. navObj.eq(i).addClass("on").siblings().removeClass("on");
  106. },
  107. scroolTxt:function(contentObj,undefined,i,slideH,opts){
  108. //alert(i*opts.steps*slideH);
  109. contentObj.animate({"margin-top":-opts.steps*slideH},opts.speed,function(){
  110. for( var j=0;j<opts.steps;j++){
  111. contentObj.find("li:first").appendTo(contentObj);
  112. }
  113. contentObj.css({"margin-top":"0"});
  114. });
  115. },
  116. scroolX:function(contentObj,navObj,i,slideW,opts,callback){
  117. contentObj.stop().animate({"left":-i*opts.steps*slideW},opts.speed,callback);
  118. if (navObj) {
  119. navObj.eq(i).addClass("on").siblings().removeClass("on");
  120. }
  121. },
  122. scroolY:function(contentObj,navObj,i,slideH,opts){
  123. contentObj.stop().animate({"top":-i*opts.steps*slideH},opts.speed);
  124. if (navObj) {
  125. navObj.eq(i).addClass("on").siblings().removeClass("on");
  126. }
  127. }
  128. };
  129. })(jQuery);