jquery.zyslide.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // 自运行的匿名函数
  2. //(function(){
  3. // alert('自运行的匿名函数');
  4. //})()
  5. //$(function(){
  6. // alert('这是一句优美的句子');
  7. //})
  8. (function($){
  9. // 本函数每次调用只负责一个轮播图的功能
  10. // 也就是说只会产生一个轮播图,这个函数的作用域只能分配一个轮播图
  11. // 所以要求在调用本函数的时候务必要将当前轮播图的根标签传过来。
  12. // 这个参数 ele 就是某个轮播图的根标签
  13. var slide = function(ele,options){
  14. // 转换成 jquery 对象
  15. var $ele = $(ele);
  16. // 设置默认选项
  17. var setting = {
  18. // 控制刚炸开的时间
  19. delay: 1000,
  20. // 控制轮播图轮播的时间(轮播的速度)
  21. speed: 2000
  22. }
  23. // 对象合并
  24. $.extend(true, setting, options);
  25. var states = [
  26. {ZIndex: 1,width: 233,height: 145,top: 68,left: 66,ZOpacity: 0.2},
  27. {ZIndex: 2,width: 253,height: 158,top: 61.5,left: 0,ZOpacity: 0.5},
  28. {ZIndex: 3,width: 337,height: 210,top: 35.5,left: 110,ZOpacity: 0.7},
  29. {ZIndex: 4,width: 450,height: 281,top: 0,left: 198,ZOpacity: 1},
  30. {ZIndex: 3,width: 337,height: 210,top: 35.5,left: 399,ZOpacity: 0.7},
  31. {ZIndex: 2,width: 253,height: 158,top: 61.5,left: 593,ZOpacity: 0.5},
  32. {ZIndex: 1,width: 233,height: 145,top: 68,left: 547,ZOpacity: 0.2},
  33. ]
  34. // 找到所有的 li
  35. var lis = $ele.find('li');
  36. // 让每个 li 对应上面 states 的每个状态
  37. function move(){
  38. lis.each(function(index,ele){
  39. var state = states[index];
  40. $(ele).css('z-index',state.ZIndex).finish().animate(state,setting.delay).find('img').css('opacity',state.ZOpacity);
  41. });
  42. }
  43. move();
  44. // 下一张,让轮播图发生偏移
  45. function next(){
  46. // 原理: 将数组最后一个元素移到数组的第一位
  47. states.unshift(states.pop());
  48. move();
  49. }
  50. // 上一张的方法,让轮播图发生偏移
  51. function prev(){
  52. // 将第一个移动到最后一位去
  53. states.push(states.shift());
  54. move();
  55. }
  56. // 点击下一张
  57. $ele.find('.zy-next').click(function(){
  58. next();
  59. })
  60. // 点击上一张
  61. $ele.find('.zy-prev').click(function(){
  62. prev();
  63. })
  64. // 自动轮播
  65. // var interval = null;
  66. // function autoPlay(){
  67. // interval = setInterval(function(){
  68. // next()
  69. // },setting.speed);
  70. // }
  71. // autoPlay();
  72. var interval = null ;
  73. function autoPlay(){
  74. interval = setInterval(function(){
  75. next()
  76. },setting.speed);
  77. }
  78. autoPlay();
  79. $ele.find('section').hover(function(){
  80. clearInterval(interval);
  81. },function(){
  82. autoPlay();
  83. })
  84. }
  85. // 找到要轮播 的轮播图的根标签,调用 slide 方法
  86. $.fn.zySlide = function(options){
  87. // this 执行的是我们 main.js 中查询到的轮播图
  88. // 根标签
  89. // console.log(this);
  90. // 因为考虑到页面可能不止一个轮播图,所以我们要遍历出
  91. // 所有的轮播图跟标签,然后执行轮播
  92. $(this).each(function(i,ele){
  93. slide(ele,options);
  94. })
  95. // 支持链式调用
  96. return this;
  97. }
  98. })(jQuery)
  99. /*
  100. * 用 jQuery 封装插件的几种写法:
  101. *
  102. * 插件类写法:
  103. * $.fn.customFun = function(){
  104. * // 自定义插件的代码
  105. * }
  106. *
  107. * 用法:
  108. * $('selector').customFun();
  109. *
  110. * 工具类写法:
  111. * $.customFun = function(){
  112. * // 自定义工具类的代码
  113. * }
  114. *
  115. * 用法:
  116. * $.customFun()
  117. *
  118. */