网页技术交流
 
发新帖
楼主: 零五零八
查看: 896|回复: 0

[使用教程] HTML+CSS+JS实现堆叠轮播效果的示例代码

[复制链接]
零五零八 发表于 2020-10-10 15:09:14 | 显示全部楼层
效果:轮播图在向一个方向移动的同时,要对其每一个图片的大小,位置,透明度以及层级进行改变



原理:轮播图向左移动时将第一个子元素剪切到末尾,轮播图向右移动时,将末尾子元素剪切到最前面,以此实现无缝轮播效果,再因为li剪切后,下一个li会补上(例如第一个子元素被剪切到最后时,第二个字元素会补上成为第一个子元素),所以li下标不变,以次来修改每一个位置的li的属性(大小,位置,透明度,层级)


HTML代码:
  1. <body>
  2.     <div class="smallBox">
  3.     <div class="arrowLeft">←</div>
  4.     <div class="smallPicBox">            //用一个div存放一个ul,并对ul里的每一个li进行初始样式设置
  5.     <ul>
  6.                 <li id="li1" style="position: absolute;top:calc(50% - 200px);left: 0px;z-index:1;background-color: aqua;transform: scale(0.5);transition: 0.3s;opacity: 0.5;background-image: url(./images/01.jpg);background-size: cover;"></li>
  7.                 <li id="li2" style="position: absolute;top:calc(50% - 200px);left: 150px; z-index:2;background-color: red;transform: scale(0.7); transition: 0.3s;opacity: 0.7;background-image: url(./images/02.jpg);background-size: cover;"></li>
  8.                 <li id="li3" style="position: absolute;top:calc(50% - 200px);left: 300px; z-index:3;background-color: blue;transform: scale(0.9); transition: 0.3s;opacity: 0.9;background-image: url(./images/03.jpg);background-size: cover;"></li>
  9.                 <li id="li4" style="position: absolute;top:calc(50% - 200px);left: 450px; z-index:4;background-color: green;transform: scale(1); transition: 0.3s;opacity: 1;background-image: url(./images/04.jpg);background-size: cover;"></li>
  10.                 <li id="li5" style="position: absolute;top:calc(50% - 200px);left: 600px; z-index:3;background-color: yellow;transform: scale(0.9); transition: 0.3s;opacity: 0.9;background-image: url(./images/05.jpg);background-size: cover;"></li>
  11.                 <li id="li6" style="position: absolute;top:calc(50% - 200px);left: 750px; z-index:2;background-color: gray;transform: scale(0.7); transition: 0.3s;opacity: 0.7;background-image: url(./images/06.jpg);background-size: cover;"></li>
  12.                 <li id="li7" style="position: absolute;top:calc(50% - 200px);left: 900px; z-index:1;background-color: deeppink;transform: scale(0.5); transition: 0.3s;opacity: 0.5;background-image: url(./images/07.jpg);background-size: cover;"></li>
  13.             </ul>
  14.         </div>
  15.         <div class="arrowRight">→</div>
  16.     </div>
  17. </div>
  18. </body>
复制代码

CSS代码:
  1. <style>
  2.         *{
  3.             margin: 0;
  4.             padding: 0;
  5.             list-style: none;
  6.         }
  7.         .albumBox{
  8.             width: 1200px;
  9.             height: 400px;
  10.             margin: 0 auto;
  11.             border: 1px solid #000;
  12.         }

  13.         .smallBox{
  14.             height: 400px;
  15.             line-height: 400px;
  16.             position: relative;
  17.         }
  18.         .smallPicBox{
  19.             width: 1100px;
  20.             height: 400px;
  21.             float: left;
  22.             position: relative;
  23.         }
  24.         .smallPicBox ul{
  25.             width: 100%;
  26.             height: 400px;
  27.         }
  28.         .smallPicBox li{
  29.             width: 320px;
  30.             height: 400px;
  31.             float: left;
  32.             border: 1px solid #000;
  33.             box-sizing: border-box;
  34.         }
  35.         .smallBox .current::after{
  36.             content: "\25b2";
  37.             position: absolute;
  38.             top: -31px;
  39.             left: 70px;
  40.             color: red;

  41.         }
  42.         .arrowLeft{
  43.             width: 50px;
  44.             height: 400px;
  45.             position: absolute;
  46.             left: 0;
  47.             border: 1px solid #000;
  48.             box-sizing: border-box;
  49.             background-color: gray;
  50.             z-index: 10;
  51.         }
  52.         .arrowRight{
  53.             width: 50px;
  54.             height: 400px;
  55.             position: absolute;
  56.             right: 0;
  57.             border: 1px solid #000;
  58.             box-sizing: border-box;
  59.             background-color: gray;
  60.             z-index: 10;
  61.         }
  62.     </style>
复制代码

JS代码:
  1. <script>
  2.         var arrowLeft=document.querySelector(".arrowLeft")
  3.         var arrowRight=document.querySelector(".arrowRight")
  4.         var ul=document.querySelector(".smallPicBox ul")
  5.         var li=document.querySelectorAll(".smallPicBox li")
  6.         var timerId=0
  7.         arrowLeft.onclick=function(){                      //左箭头点击事件
  8.                 li=document.getElementsByTagName('li')
  9.                 ul.appendChild(li[0])                         //将ul的第0个子元素剪切到末尾,实现无缝轮播
  10.                  posi(li)                                 //修改每一个li的属性
  11.            }
  12.         arrowRight.onclick=function(){                    //右箭头点击事件
  13.             li=document.getElementsByTagName('li')        //重新获取li
  14.                 ul.insertBefore(li[6],li[0])                 //将ul的最后一个子元素剪切到最前面,实现无缝轮播
  15.                  posi(li)                                 //修改每一个li的属性
  16.         }
  17.          
  18.         function posi(li){                                //修改li属性函数
  19.             var n1=0
  20.                 for(var x=0;x<li.length;x++){     //修改位置
  21.                     li[x].style.left=n1+'px'
  22.                     n1=n1+150
  23.                 }
  24.                 for(var i=0;i<li.length/2;i++){     //修改层级
  25.                     li[i].style.zIndex=i+1
  26.                     li[li.length-1-i].style.zIndex=i+1
  27.                 }
  28.                 li[3].style.zIndex='4'
  29.                 var n2=0.3
  30.                 for(var j=0;j<li.length/2;j++){        //缩放
  31.                     n2=parseFloat(n2+0.2)
  32.                     li[j].style.transform='scale('+n2+')'
  33.                     li[li.length-1-j].style.transform='scale('+n2+')'
  34.                 }
  35.                 li[3].style.transform='scale(1)'
  36.                 var n3=0.3
  37.                 for(var k=0;k<li.length/2;k++){       //修改透明度
  38.                     n3=parseFloat(n3+0.2)
  39.                     li[k].style.opacity=n3
  40.                     li[li.length-1-k].style.opacity=n3
  41.                 }
  42.                 li[3].style.opacity='1'
  43.         }
  44.         //鼠标移入移出
  45.         temerId=setInterval(function(){
  46.              arrowLeft.click()
  47.         }, 1000);
  48.         arrowLeft.onmouseover=function(){
  49.             clearInterval(temerId)
  50.         }
  51.         arrowLeft.onmouseout=function(){
  52.            temerId=setInterval(function(){
  53.             arrowLeft.click()
  54.          }, 1000);
  55.         }
  56.         arrowRight.onmouseover=function(){
  57.             clearInterval(temerId)
  58.         }
  59.         arrowRight.onmouseout=function(){
  60.            temerId=setInterval(function(){
  61.             arrowLeft.click()
  62.          }, 1000);
  63.         }
  64.     </script>
复制代码

注:本例js是直接写在body里的,也可以单独写一个js文件,在引入到html界面
效果图:
1.gif
到此这篇关于HTML+CSS+JS实现堆叠轮播效果的示例代码的文章就介绍到这了


快速回复 返回顶部 返回列表