HTML+CSS+JS 全景轮播

admin 2024-08-11 605 阅读 0评论

实现了一个全景轮播的效果,包括多张图片在容器中的轮播展示,以及左右按钮的控制。其中,CSS实现了图片的布局和样式,JavaScript实现了左右按钮的点击事件,以及图片的切换。

Code

HTML
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>全景轮播</title>
    <link rel="stylesheet" href="./56-全景轮播.css">
</head>

<body>
    <div class="container">
        <div id="slide">
            <div class="item" style="background-image:url('./images/01.jpg')"></div>
            <div class="item" style="background-image:url('./images/02.jpg')"></div>
            <div class="item" style="background-image:url('./images/03.jpg')"></div>
            <div class="item" style="background-image:url('./images/04.jpg')"></div>
            <div class="item" style="background-image:url('./images/05.jpg')"></div>
            <div class="item" style="background-image:url('./images/06.jpg')"></div>
        </div>
        <div class="buttons">
            <div class="left">
                Prev</div>
                    <div class="center">下载壁纸</div>
                    <div class="right">Next ></div>
            </div>
        </div>
        <script src="./56-全景轮播.js"></script>
</body>

</html>
CSS
* {
    margin0;
    padding0;
    box-sizing: border-box;
}

.container {
    width100vw;
    height100vh;
    position: relative;
    overflow: hidden;
}

.item {
    width240px;
    height160px;
    position: absolute;
    top50%;
    left0;
    transformtranslateY(-50%);
    border-radius10px;
    box-shadow0 30px 50px #505050;
    background-size: cover;
    background-position: center;
    transition1s;
}

.item:nth-child(1),
.item:nth-child(2) {
    left0;
    top0;
    width100%;
    height100%;
    transformtranslateY(0);
    box-shadow: none;
    border-radius0;
}

.item:nth-child(3) {
    left70%;
}

.item:nth-child(4) {
    leftcalc(70% + 250px);
}

.item:nth-child(5) {
    leftcalc(70% + 500px);
}

.item:nth-child(n+6) {
    leftcalc(70% + 750px);
    opacity0;
}

.buttons {
    width100%;
    position: absolute;
    bottom50px;
    margin-left: -50px;
    text-align: center;
    display: flex;
    justify-content: center;
}

.buttons div {
    width120px;
    height50px;
    line-height50px;
    text-align: center;
    border-radius5px;
    margin0 25px;
    transition: .5s;
    cursor: pointer;
    user-select: none;
    font-size20px;
    color#fff;
    background-colorrgba(0000.4);
    box-shadow2px 2px 2px rgba(0000.2);
}
JavaScript
const leftBtn = document.querySelector(".buttons .left")
const rightBtn = document.querySelector(".buttons .right")
const slide = document.querySelector("#slide")
let openClick = true // 节流处理 (保证动画执行过程,按钮不被重复点击)

leftBtn.addEventListener("click", () => {
    if (openClick) {
        openClick = false // 触发点击后,禁用按钮
        const items = document.querySelectorAll(".item")
        slide.prepend(items[items.length - 1])

        setTimeout(() => openClick = true1000// 1s 再开放按钮的点击
    }
})
rightBtn.addEventListener("click", () => {
    if (openClick) {
        openClick = false
        const items = document.querySelectorAll(".item")
        slide.appendChild(items[0])

        setTimeout(() => openClick = true1000)
    }
})

实现思路拆分

CSS 部分
* {
    margin0;
    padding0;
    box-sizing: border-box;
}

重置默认样式。

.container {
    width100vw;
    height100vh;
    position: relative;
    overflow: hidden;
}

设置容器占据全部视窗宽高,相对定位,且隐藏溢出内容。

.item {
    width240px;
    height160px;
    position: absolute;
    top50%;
    left0;
    transformtranslateY(-50%);
    border-radius10px;
    box-shadow0 30px 50px #505050;
    background-size: cover;
    background-position: center;
    transition1s;
}

设置轮播图项的样式,包括尺寸、位置、阴影、圆角、背景覆盖等。

.item:nth-child(1),
.item:nth-child(2) {
    left0;
    top0;
    width100%;
    height100%;
    transformtranslateY(0);
    box-shadow: none;
    border-radius0;
}

为前两个轮播图项设置特殊样式,使其全屏显示。

.item:nth-child(3) {
    /* ... */
}

设置第三个轮播图项的位置。

.item:nth-child(3) {
    left70%;
}

设置第六个及以后轮播图项的透明度为0,表示它们在视觉上不可见。

.buttons {
    width100%;
    position: absolute;
    bottom50px;
    margin-left: -50px;
    text-align: center;
    display: flex;
    justify-content: center;
}

设置按钮容器的样式,包括宽度、位置、布局等。

.buttons div {
    width120px;
    height50px;
    line-height50px;
    text-align: center;
    border-radius5px;
    margin0 25px;
    transition: .5s;
    cursor: pointer;
    user-select: none;
    font-size20px;
    color#fff;
    background-colorrgba(0000.4);
    box-shadow2px 2px 2px rgba(0000.2);
}

为按钮设置样式,包括尺寸、文本对齐、圆角、过渡效果等。

JavaScript 部分
const leftBtn = document.querySelector(".buttons .left");
const rightBtn = document.querySelector(".buttons .right");
const slide = document.querySelector("#slide");
let openClick = true;

获取左右按钮和轮播容器元素,设置openClick变量用于控制点击事件。

leftBtn.addEventListener("click", () => {
    if (openClick) {
        openClick = false // 触发点击后,禁用按钮
        const items = document.querySelectorAll(".item")
        slide.prepend(items[items.length - 1])

        setTimeout(() => openClick = true1000// 1s 再开放按钮的点击
    }
})

为左按钮添加点击事件,实现轮播图的左切换。

rightBtn.addEventListener("click", () => {
    if (openClick) {
        openClick = false
        const items = document.querySelectorAll(".item")
        slide.appendChild(items[0])

        setTimeout(() => openClick = true1000)
    }
})

为右按钮添加点击事件,实现轮播图的右切换。

喜欢就支持以下吧
点赞 0

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 0 条评论, 605人围观)

最近发表

热门文章

最新留言

热门推荐

标签列表