HTML 简易、易懂版轮播图 有图有真相 JavaScript实现

HTML 简易、易懂版轮播图 JavaScript实现

😂最终效果如下😂
在这里插入图片描述

一、整体布局
HTML代码:

        <ul>
            <li class="lb"><img src="imgs/1.jpg" alt="#"/></li>
            <li class="lb"><img src="imgs/2.jpg" alt="#"/></li>
            <li class="lb"><img src="imgs/3.jpg" alt="#"/></li>
         </ul>

*说明:代码很简单,就是一个无序列表,然后无序列表里面有三个li标签,每个li标签就有一个图片

二、CSS款式装修
简单设置CSS样式:

        ul{
            border: 2px solid black;
            width: 400px;
            height: 300px;
        }
        li,img{
            width: 100%;
            height: 100%;
        }

*说明:这里我们随便给ul标签设置一下宽高度,并且给ul标签加个外框,即:ul{ border: 2px solid black; }显得更加形象化,同时把li标签和图片大小宽高都设置成100%,就可以让li铺满整个ul,img铺满整个li,注意:li前面那个小黑点也属于li标签的一部分

运行效果
在这里插入图片描述
为了让布局显得更加优雅,我们做以下几点:
1、改变body的背景颜色为:body{ background-color: violet; }
2、把li标签前面的小黑点去掉:ul{ list-style-type: none; }
3、加了1、2后运行结果如下:
在这里插入图片描述这是会发现,即使把li标签的小黑点去掉了,但是该小黑点的所处的位置依然还在,还是会把图片挤偏过去,存在有一定的间隙,所以我们再把它的内间距设为0px,即:ul{ padding:0px; },效果如下:
在这里插入图片描述
4、😊有了以上三条肯定还是不够,我们想要的成效是一个地方循环播放多个图片,所以大概思路就是,将作为父亲元素的ul标签的定位设置成相对定位,即:ul{ position: relative; }同时将作为子元素的三个li标签的布局设置成绝对定位,即:li{ position: absolute; },这样两者就形成了混合式定位(mix relative and absolute),这样子所有的子元素就会把父亲元素当成整个屏幕,也就是说你去设置子元素的top和left的大小的时候,这几个子元素就是相对于父亲元素来说,而再也不是相对于整个屏幕来说了O(∩_∩)O~~😄

5、根据4所说的,按照道理来说我们应该把li标签的top和left都设置成0px,使其所有的子元素li标签距离父亲元素ul标签的上、左边沿都为0,即:li{top:0px; left:0px;},可是之前我已经把子元素li标签的宽高都设置成了100%,所以加不加这两个都是正好铺满整个ul标签。当然我们还是要把ul标签水平居个中哈,这样才更加好看,即:ul{ margin: auto; }运行效果如下😊
在这里插入图片描述6、😡晕头枯燥,最后一步。我们先把所有li标签的透明度都设置成0,即:li{ opacity: 0; },将其隐藏,原因待会儿再说😁,效果如下
在这里插入图片描述

三、JavaScript轮播效果实现
1、废话少说,放码过来😋
*整体思路:当整个页面加载完,依次将各个li标签显示出来

window.onload = function(){
    var arr = document.getElementsByClassName("lb");
    var i = 0;
    arr[0].style.opacity = 1;
    setInterval(function(){
        if(i>2){
            i=0;
            for(var j=0;j<arr.length;j++){
                arr[j].style.opacity = 0;
            }
        }
        arr[i].style.opacity = 1;
        i++;
    },2000);

}

解释说明:
1、var arr = document.getElementsByClassName('lb')的意思是得到HTML文件里面的所有类名为’lb’,即:class='lb'的元素,可以把函数名拆成get Element By ClassName(‘lb’),即:获取–>元素–>通过–>类名为’lb’😄。获取之后肯定有三个元素,这三个元素就是那三个li标签,并且从上到下顺序存放在arr数组里面,分别为arr[0]、arr[1]、arr[2]但这个arr数组是个伪数组,并不是真正的数组,只能用使用.lenth这个方法。

2、var i = 0;就是定义一个整型变量i,作为arr数组的下标

3、arr[0].style.opacity = 1;这个的意思是要事先把第一个li标签里面的style里面的opacity属性等于1,说白了就是把第一个li标签显示出来😂,如果没有这句的话,当加载完页面后,那个ul标签块处会啥都没有,就一个框框😱,非常地影响美观😡,所以要加,你可以不加试试看效果

4、setInterval(参数1,参数2)函数的使用,这个函数的功能就是按照一定周期地去执行某个函数。既然是按照一定周期,就说明肯定要有个周期时间,比如我这里的周期就是2000毫秒,即2秒;其次一定周期地去执行某个函数,某个函数,某个函数,那就说明这“某个函数”就是你自己定义函数,阐明你要干什么。

😘比如我这里的“某个函数“的意思就是说先判断i是否大于2,此时发现i=0不是大于2,好,不走if段,将arr[0]显示出来,并且i++。
👇
再次从头循环,发现i=1,还是小于等于2,不走if段,将arr[1]显示出来,并且i++。
👇
再次从头循环,发现i=2,还是小于等于2,还是不走if段,将arr[2]显示出来,并且i++。
👇
再次从头循环,发现i=3,大于2了,就将i归0,并且把arr[0]、arr[1]、arr[2]全部都隐藏
👇然后再来,把arr[0]又显示出来,如此循环下去

😭完整代码
HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/test.css" type="text/css"><link>
    <script type="text/javascript" src="JS/test.js" charset="UTF-8"></script> 
</head>
<body>
     <ul>
        <li class="lb"><img src="imgs/1.jpg" alt="#"/></li>
        <li class="lb"><img src="imgs/2.jpg" alt="#"/></li>
        <li class="lb"><img src="imgs/3.jpg" alt="#"/></li>
    </ul> 
</body>
</html>

CSS

body{
    background-color:violet
}
ul{
    border: 2px solid black;
    width: 400px;
    height: 300px;
    list-style-type: none;
    padding: 0px;
    margin: auto;
    position: relative;
}
li,img{
    width: 100%;
    height: 100%;
}
li{
    position: absolute;
    opacity: 0;
    transition: 1s;
}

JS

window.onload = function(){
    var arr = document.getElementsByClassName("lb");
    var i = 0;
    arr[0].style.opacity = 1;
    setInterval(function(){
        if(i>2){
            i=0;
            for(var j=0;j<arr.length;j++){
                arr[j].style.opacity = 0;
            }
        }
        arr[i].style.opacity = 1;
        i++;
    },2000);
}

*注意:我在css的li标签那里加了transition: 1s;是为了图片切换得更加大众审美,让其更加丝滑~~🤣,不会显得那么生硬。

  • 22
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
好的,以下是一个简单的 HTMLCSS 3D 轮播图片示例,其中包含四张图片 : ```html <!DOCTYPE html> <html> <head> <title>3D轮播图片</title> <style> body { margin: 0; padding: 0; overflow: hidden; } .container { position: relative; width: 100vw; height: 100vh; perspective: 1000px; transform-style: preserve-3d; } .item { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; font-size: 5em; color: #fff; background-color: #333; transform-style: preserve-3d; transition: transform 1s; } .item:nth-child(1) { transform: rotateY(0deg) translateZ(500px); } .item:nth-child(2) { transform: rotateY(90deg) translateZ(500px); } .item:nth-child(3) { transform: rotateY(180deg) translateZ(500px); } .item:nth-child(4) { transform: rotateY(270deg) translateZ(500px); } .container:hover .item:nth-child(1) { transform: rotateY(-90deg) translateZ(500px); } .container:hover .item:nth-child(2) { transform: rotateY(0deg) translateZ(500px); } .container:hover .item:nth-child(3) { transform: rotateY(90deg) translateZ(500px); } .container:hover .item:nth-child(4) { transform: rotateY(180deg) translateZ(500px); } </style> </head> <body> <div class="container"> <div class="item">1</div> <div class="item">2</div> <div class="item">3</div> <div class="item">4</div> </div> </body> </html> ``` 在这个示例中,我们使用了 CSS 的 3D 变换来实现轮播图片的效果。每个图片元素都有不同的旋转角度和 3D 位移量。鼠标悬停在容器上时,通过修改旋转角度来实现图片的切换效果。 您可以将每个图片元素的内容替换成自己的图片链接或其他内容。如果您需要添加更多的图片,可以复制 `.item` 元素并根据需要修改旋转角度和位移量。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值