jQuery实现淘宝轮播图

ゞ 浴缸里的玫瑰 2022-10-02 14:50 253阅读 0赞

我爱撸码,撸码使我感到快乐
大家好,我是Counter
今天给大家分享的是利用jQuery来实现淘宝轮播图,揭开这层神秘的面纱,CSS样式就不做过多的赘述了,主要就是实现的原理,也就是jQuery,老样子,每行基本都打上了我理解的注释,表达的可能不是很好,但是理解理解就OK,欢迎一起技术探讨,一起成长。
再讲讲轮播图的需求吧,一打开网址,轮播图就会自己每3秒切换到下一张,总共5张,一直轮播,当你鼠标进入图片区域,那么图片不再自动轮播,你可以点击向左的按钮,也可以点击向右的按钮,你点左图片就切到上一张,点右就切到下一张,并且你可以点击下面的小原点,点哪跑那张,并且鼠标离开,轮播图又会自己每3秒跑起来,好了,废话不多说,先上效果,可以试试哦,应该没bug,嘿嘿。。。
效果如下:
ps:如果效果出不来,那么请刷新下页面

代码给出:

  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>淘宝轮播图</title>
  8. <!-- CSS样式 -->
  9. <style>
  10. body, ul, li {
  11. margin: 0;
  12. padding: 0;
  13. list-style: none;
  14. }
  15. .wrapper {
  16. width: 520px;
  17. margin: 50px auto 0;
  18. font-size: 0;
  19. }
  20. .box {
  21. position: relative;
  22. width: 520px;
  23. height: 280px;
  24. overflow: hidden;
  25. }
  26. .box .img-list {
  27. position: absolute;
  28. top: 0;
  29. left: 0;
  30. width: 3120px;
  31. height: 280px;
  32. }
  33. .box .img-list li {
  34. display: inline-block;
  35. width: 520px;
  36. height: 280px;
  37. }
  38. .box .img-list img {
  39. width: 520px;
  40. }
  41. .wrapper .box span {
  42. position: absolute;
  43. display: inline-block;
  44. top: 50%;
  45. margin-top: -25px;
  46. width: 30px;
  47. height: 50px;
  48. line-height: 47px;
  49. text-align: center;
  50. cursor: pointer;
  51. font-size: 18px;
  52. background-color: rgba(0, 0, 0, 0.5);
  53. color: #fff;
  54. z-index: 999;
  55. user-select: none;
  56. }
  57. .wrapper .box .left {
  58. left: 0;
  59. border-radius: 0 10px 10px 0;
  60. }
  61. .wrapper .box .right {
  62. right: 0;
  63. border-radius: 10px 0 0 10px;
  64. }
  65. .box .dot {
  66. position: absolute;
  67. bottom: 10px;
  68. width: 100%;
  69. text-align: center;
  70. }
  71. .dot .dot-list {
  72. display: inline-block;
  73. background-color: rgba(0, 0, 0, 0.5);
  74. border-radius: 10px;
  75. }
  76. .dot-list .item {
  77. display: inline-block;
  78. width: 10px;
  79. height: 10px;
  80. border-radius: 50%;
  81. background-color: #fff;
  82. margin: 2px;
  83. cursor: pointer;
  84. }
  85. .dot-list .active {
  86. background-color: #ff6700;
  87. }
  88. </style>
  89. </head>
  90. <body>
  91. <div class="wrapper">
  92. <div class="box">
  93. <span class="left"><</span>
  94. <span class="right">></span>
  95. <ul class="img-list">
  96. <li>
  97. <a href="javascript:;">
  98. <img src="http://img1.imgtn.bdimg.com/it/u=3094246468,617437449&fm=26&gp=0.jpg" alt="">
  99. </a>
  100. </li>
  101. <li>
  102. <a href="javascript:;">
  103. <img src="http://ftp.nowamagic.net/librarys/images/92.jpg" alt="">
  104. </a>
  105. </li>
  106. <li>
  107. <a href="javascript:;">
  108. <img src="http://img.mp.itc.cn/upload/20170706/88c62ffcfe8748a78e6b2d66c77ebbef_th.jpg" alt="">
  109. </a>
  110. </li>
  111. <li>
  112. <a href="javascript:;">
  113. <img src="http://pic.58pic.com/58pic/16/17/72/24858PIC3hD_1024.jpg" alt="">
  114. </a>
  115. </li>
  116. <li>
  117. <a href="javascript:;">
  118. <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1554278929&di=31b49ed3ef2bde4304c49a8632c79456&imgtype=jpg&er=1&src=http%3A%2F%2Fimages.ali213.net%2Fpicfile%2Fpic%2F2013%2F12%2F15%2F584_20131215140559601.png" alt="">
  119. </a>
  120. </li>
  121. <li>
  122. <a href="javascript:;">
  123. <img src="http://img1.imgtn.bdimg.com/it/u=3094246468,617437449&fm=26&gp=0.jpg" alt="">
  124. </a>
  125. </li>
  126. </ul>
  127. <div class="dot">
  128. <ul class="dot-list">
  129. <li class="item active"></li>
  130. <li class="item"></li>
  131. <li class="item"></li>
  132. <li class="item"></li>
  133. <li class="item"></li>
  134. </ul>
  135. </div>
  136. </div>
  137. </div>
  138. <!-- jQuery已在线移入,这边注释 -->
  139. <!-- <script src="../jquery-3.3.1.js"></script> -->
  140. <!-- jQuery -->
  141. <script>
  142. // 设置比较索引的最小值0,5
  143. var minNum = 0;
  144. var maxNum = 5;
  145. // 刚开始索引为0
  146. var index = 0;
  147. // 设置一个计时器为空
  148. var counter = null;
  149. // 设置最小移动距离520,因为这边每张图片都为宽度520px,高度280px
  150. var limWidth = 520;
  151. // 设置自动轮播函数
  152. function autoMove() {
  153. // 如果计时器不为空的话那么跳出,计时器不为空,说明当前有计时器在跑,那么你就老老实实的跑当前的计时器,别给搞事
  154. if (counter != null) {
  155. return;
  156. }
  157. // 如果计时器为空的话,那么开启一个每3秒执行一次autoPlay的函数
  158. counter = setInterval(autoPlay, 3000);
  159. }
  160. // 自动轮播函数,其实很简单,向函数cliMove传递参数right,就好比,一个人每3秒点击一次右边的小按钮,不过这变有电脑去执行
  161. function autoPlay() {
  162. cliMove('right');
  163. }
  164. // 执行函数,传递形参,代表方向
  165. function cliMove(direction) {
  166. // 因为在这边有涉及到整个ul宽度的变化的动画,stop()函数有两个参数,涉及到jQuery动画,第一个参数意思是,是否还要保留动画队列,false不保留,true保留。第二个参数意思是,是否立即执行完当前的动画,true是,false不是,那这边选择true的原因是我需要你立即响应当前用户的操作,防止用户快速点击左右按钮,移开鼠标,而动画却还在移动。这边第一个参数填false或者true,已经影响不了什么了,因为当前动画立即执行,动画队列肯定是没有了,所有第一个参数填false或者true,已经不打紧了
  167. $('.img-list').stop( false, true );
  168. // 如果用户点击的是右边的按钮
  169. if ( direction == "right" ) {
  170. // 那么索引值加1,没点击一次在原有基础上加一次
  171. index++;
  172. // 如果索引值大于5了
  173. if ( index > 5) {
  174. // 意味着用户浏览到第六张了,而这边第六张正是第一张,为了实现无缝连接,所以这样处理,看着只有5张,实际上头尾两张是一样的,所以有六张
  175. // 那么将ul的left设置为0,又回到了第一张,注意这边是迅速移动到第一张,因为用了css属性,而不是animate移动动画
  176. $('.img-list').css({
  177. left: 0
  178. })
  179. // 同时将索引值设置为1,注意这边的1为第二张,在大多数编程语言中,数组都是从0开始,JS也是一样的
  180. index = 1;
  181. }
  182. }
  183. // 如果传递用户点击的是左边的按钮
  184. else if ( direction == "left") {
  185. // 那么索引值减1
  186. index--;
  187. // 如果索引值小于0的话,运用的原理跟上面雷同,意味着迅速移到第六张
  188. if ( index < 0 ) {
  189. $('.img-list').css({
  190. left: maxNum * -limWidth
  191. })
  192. // 同时索引值变为4,意味着变为第五张
  193. index = 4;
  194. }
  195. }
  196. // 每次index变换时小原点的背景也跟着变换,与图片一一对应,但是图片一共是6张,小原点就5个,所有这边进行判断,如果index大于4的话就返回0即代表着第一个小原点,否则的话图片就随着index变化而变化
  197. dotMove($('.item').eq(index > 4 ? 0 : index));
  198. // 不关点击的是左边的还是右边的,最后结果都是要执行这句话的,这步是动画移动的关键,
  199. // ul的left值设为当前索引与每张图片最小宽度的乘积,这边的负值是意味着,这个ul定位相对于父级left的负值
  200. $('.img-list').animate({
  201. left: index * -limWidth
  202. });
  203. }
  204. // 绑定ul父级的鼠标进入,离开事件,jQuery链式调用,如果鼠标进入,那么清空当前自动轮播的计时器,如果鼠标离开,那么重新执行自动轮播的函数
  205. $('.box').mouseenter(function () {
  206. clearInterval(counter);
  207. counter = null;
  208. }).mouseleave(function () {
  209. autoMove();
  210. })
  211. //绑定点击事件,如果点击了右边按钮,那么触发函数cliMove,这个函数在上面已经详细注释了,并传入right,图片就会跟你按的次数,进行移动播放
  212. $('.right').click(function () {
  213. cliMove('right');
  214. })
  215. $('.left').click(function () {
  216. cliMove('left');
  217. })
  218. // 绑定下面小原点事件,如果点击了其中任意一个小原点,那么获取到当前点击的小原点的索引,并且赋值给index,并且执行函数cliMove,不传入参数,因为此时,希望图片与小原点一一对应
  219. $('.item').click(function () {
  220. index = $(this).index();
  221. cliMove('');
  222. })
  223. // 点击小原点后将会触发cliMove函数,并且在这个函数中,执行了dotMove,移除当前小原点的CSS样式,向dotMove函数传入当前点击的小原点所在的位置,并且设置其CSS样式,即点击的小原点背景变为橘黄色
  224. function dotMove(dom) {
  225. $('.active').removeClass('active');
  226. dom.addClass('active');
  227. }
  228. // 当页面刷新,先执行一边自动轮播的函数,这个时候图片就会自己轮播起来了
  229. autoMove();
  230. </script>
  231. </body>
  232. </html>

是不是感觉用jQuery实现比原生JS方便太多了,便捷太多了,没错就是这样滴。

转载于:https://www.cnblogs.com/Counterrr/p/10611842.html

发表评论

表情:
评论列表 (有 0 条评论,253人围观)

还没有评论,来说两句吧...

相关阅读

    相关 jQuery实现

    我之前用css3实现轮播图过,不过那是一个简单的轮播图,只能来回切换图片。因为那时候我还没有学过javascript,没学过javascript的同学也可以去我主页看看。当然,

    相关 jQuery实现(二)

    这里的轮播为轮播增添了一个效果,前一张图片整体碎成小块块然后上移消失,而下一张图片显示出 ![这里写图片描述][SouthEast] 原理为:事先创建一堆浮动的div(宽

    相关 利用JQuery实现

    上一篇文章写了利用初级JS实现无缝轮播图,但是实际写起来有点费劲,量有些大,如果改用jQuery写无缝轮播图的话,写起来比较便捷,而已逻辑比较清晰,简单,实现起来比较快捷,性能

    相关 纯js实现商城

    需求:   循环无缝自动轮播3张图片,点击左右箭头可以手动切换图片,鼠标点击轮播图下面的小圆点会跳转到对应的第几张图片。鼠标放到轮播图的图片上时不再自动轮播,鼠标移开之后又