原生js层叠轮播图

向右看齐 2022-11-08 14:15 275阅读 0赞

前言:
已经一个月没有怎么更博了,一直在学习一些其他得。之前在网上看到一个层叠样式得轮播图,也是看过一个博主得内容以后自己又理清楚了思路才写出来。

原文出处:https://www.cnblogs.com/iFangHuanrui/p/10584223.html

正文:
对于这类轮播图首先我们要先设置好每个需要轮播元素得位置,使得看上去相对得立体一点,那么下面我们来想一下,假设有5张图片需要轮播,图片得顺序从左到右一次排列,那么我们是不是需要将第一张和第五张对应起来,放在两边,第二张和第四章放在两边对应起来。第三张也就是当前展示得轮播图放到中间就可以了。效果如下:

下面我们来看下代码:

HTML:

  1. <div>
  2. <ul>
  3. <li class="show1">1</li>
  4. <li class="show2">2</li>
  5. <li class="show3">3</li>
  6. <li class="show4">4</li>
  7. <li class="show5">5</li>
  8. <!-- 切换按钮 -->
  9. <div class="cut1"></div>
  10. <div class="cut2"></div>
  11. </ul>
  12. </div>

CSS:

  1. div{
  2. width: 1200px;
  3. height: 800px;
  4. margin:150px auto;
  5. background:pink;
  6. }
  7. ul{
  8. position:relative;
  9. width: 100%;
  10. height: 100%;
  11. transform:rotateX(-20deg);
  12. }
  13. li{
  14. position:absolute;
  15. list-style:none;
  16. height: 350px;
  17. font-size:64px;
  18. transition: all .3s;
  19. }
  20. .show1{
  21. width:400px;
  22. top: 20px;
  23. left:0px;
  24. opacity:0.2;
  25. z-index:1;
  26. background:yellow;
  27. }
  28. .show5{
  29. width: 400px;
  30. left:750px;
  31. top: 20px;
  32. opacity:0.2;
  33. z-index:1;
  34. background:aqua;
  35. }
  36. .show2{
  37. width: 600px;
  38. left:0px;
  39. top:70px;
  40. opacity:.7;
  41. z-index:2;
  42. background:orange;
  43. }
  44. .show4{
  45. width: 600px;
  46. left:600px;
  47. top:70px;
  48. opacity:.7;
  49. z-index:2;
  50. background:gold;
  51. }
  52. .show3{
  53. width: 800px;
  54. left:180px;
  55. top:100px;
  56. z-index:3;
  57. opacity:1;
  58. background: hotpink;
  59. }
  60. .cut1{
  61. position:absolute;
  62. z-index:99;
  63. font-size: 30px;
  64. left:0;
  65. top:0;
  66. width: 50px;
  67. height: 70px;
  68. text-align:center;
  69. line-height:70px;
  70. background:gray;
  71. }
  72. .cut2{
  73. position:absolute;
  74. z-index:99;
  75. font-size: 30px;
  76. right:39px;
  77. top:0;
  78. width: 50px;
  79. height: 70px;
  80. text-align:center;
  81. line-height:70px;
  82. background:gray;
  83. }

这些基本要求实现后,我们来看下核心部分怎么实现,大家想一下,假设我们得5张图片 1 2 3 4 5按顺序从左到右排放整齐,轮播图得整体效果是向右走的,目前显示得是第一张,那么接下来是不是需要显示第二张,那么如何显示第二张呢,是不是需要把第一张图片放到尾部,这样第二张图片就显示出来了。

那么现在得图片得顺序是不是 2 3 4 5 1,这时候我们想要轮播图向左移动一张,是不是说想要显示第一张图片,那么这个时候我们是不是只需要把最后一个元素1,移动到头部就行了呢,这样顺序就变成了1 2 3 4 5

有了以上得思路我们先实现一下自动轮播得效果:

JS:

  1. // 获取变量名称
  2. var ul = document.querySelector('ul');
  3. var li = document.querySelectorAll("li");
  4. var name1 = ["show1","show2","show3","show4","show5"];//name-style
  5. var cut1 = document.querySelector('.cut1'); //cut1
  6. var cut2 = document.querySelector('.cut2'); //cut2
  7. timer = setInterval(function(){
  8. // 把开头的元素放到最后
  9. console.log("11");
  10. var first = name1.shift(); //获取第一个元素
  11. name1.push(first);//追加到数组尾部
  12. for(var i=0;i<li.length;i++){
  13. li[i].className = name1[i];
  14. }
  15. },3000);

这里就是按照上面得思路写出来得自动轮播效果。注意这里把我们上面调整得每个元素得样式复制到数组中,然后給修改每个轮播得元素得样式,也就是把name1数组得样式赋值給轮播得元素

那么大家在想一下左右切换,左切换就是说把最后一个元素移动到头部,而右切换呢,就是把第一个元素移动到尾部
代码:

  1. // 左点击切换
  2. cut1.onclick = function(){
  3. clearInterval(timer); //鼠标点击切换时轮播中断
  4. // 把数组中最后一个元素提到前面
  5. var last = name1.pop(); //删除并返回最后一个元素
  6. name1.unshift(last); //添加到数组头部
  7. for(var i=0;i<li.length;i++){
  8. li[i].className = name1[i];
  9. }
  10. }
  11. // 右点击切换
  12. cut2.onclick = function(){
  13. clearInterval(timer); //鼠标点击切换时轮播中断
  14. console.log("轮播停止");
  15. var first = name1.shift(); //获取第一个元素
  16. name1.push(first);//追加到数组尾部
  17. for(var i=0;i<li.length;i++){
  18. li[i].className = name1[i];
  19. }
  20. }

那么我们点击切换后,由于清除了该定时器,就会导致点击后自动轮播效果中断,所以我们需要在按钮得鼠标离开事件中再重新启动轮播图,这样就可以实现鼠标点击后继续轮播了

  1. // 鼠标离开是继续轮播
  2. cut2.onmouseout = function(){
  3. console.log("鼠标离开");
  4. timer = setInterval(function(){
  5. console.log("轮播继续");
  6. // 把开头的元素放到最后
  7. console.log("11");
  8. var first = name1.shift(); //获取第一个元素
  9. name1.push(first);//追加到数组尾部
  10. for(var i=0;i<li.length;i++){
  11. li[i].className = name1[i];
  12. }
  13. },3000);
  14. }
  15. // 鼠标离开是继续轮播
  16. cut1.onmouseout = function(){
  17. console.log("鼠标离开");
  18. timer = setInterval(function(){
  19. console.log("轮播继续");
  20. // 把开头的元素放到最后
  21. console.log("11");
  22. var first = name1.shift(); //获取第一个元素
  23. name1.push(first);//追加到数组尾部
  24. for(var i=0;i<li.length;i++){
  25. li[i].className = name1[i];
  26. }
  27. },3000);
  28. }

好了,答主本期得分享就到这里。欢迎大家指正与评论!!

发表评论

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

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

相关阅读

    相关 原生js层叠

    前言: 已经一个月没有怎么更博了,一直在学习一些其他得。之前在网上看到一个层叠样式得轮播图,也是看过一个博主得内容以后自己又理清楚了思路才写出来。 原文出处:https:

    相关 原生js实现

            很多很多网站经常会用到一个特效,那就是轮播图,对于日新月异的前端技术来说其实就是一个框架一个接口的事,但轮播的原理是什么?用最原始的javascript来写又是

    相关 原生js实现

    轮播图基本上是前端所必须面临的一个功能。而且在网上可以找到各种各样的插件或者写法。 但是我个人觉得还是写一下比较好。这里用到的是原生JS、CSS3相结合的写法。 对IE 8

    相关 原生js实现

    原生js实现轮播图  很多网站上都有轮播图,但却很难找到一个系统讲解的,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出。  [