图片三维轮播

本文介绍了如何创建一个具有三维视觉效果的图片轮播。通过HTML构建基础结构,CSS设置样式实现旋转效果,以及JavaScript控制轮播的动态切换,最终展示了一个令人印象深刻的交互式图像展示方案。
摘要由CSDN通过智能技术生成
执行效果

在这里插入图片描述

html代码
<div class="banner">
    <div class="imglist" style="left: 300px;  top: 150px; z-index: 5">
        <img src="./0815/img/1.jpg" alt=""/>
    </div>
    <div class="imglist" style="left: 0;  top: 100px; z-index: 4">
        <img src="./0815/img/2.jpg" alt=""/>
    </div>
    <div class="imglist" style="left: 0;  top: 50px; z-index: 3">
        <img src="./0815/img/3.jpg" alt=""/>
    </div>
    <div class="imglist" style="left: 300px;  top: 0; z-index: 2">
        <img src="./0815/img/4.jpg" alt=""/>
    </div>
    <div class="imglist" style="left: 600px;  top: 50px; z-index: 3">
        <img src="./0815/img/5.jpg" alt=""/>
    </div>
    <div class="imglist" style="left: 600px;  top: 100px; z-index: 4">
        <img src="./0815/img/6.jpg" alt=""/>
    </div>
    <div class="dian">
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </div>
</div>
css样式
    body {
        background: #000;
    }

    .banner {
        margin: auto;
        position: relative;
        width: 1000px;
        height: 350px;
        border: 1px solid #fff;
    }

    .imglist {
        width: 400px;
        height: 200px;
        position: absolute;
        transition: all .1s linear;
    }

    .imglist img {
        width: 100%;
        height: 100%;
        box-shadow: 0 0 15px silver;
    }

    /*点 样式*/
    .dian {
        z-index: 10;
        position: absolute;
        left: 0;
        bottom: -40px;
        text-align: center;
        width: 100%;
    }

    .dian > div {
        width: 20px;
        height: 20px;
        border: 2px solid #fff;
        display: inline-block;
        box-sizing: border-box;
        border-radius: 50%;
    }

    /*点 选中后的效果*/
    .bgcolor {
        background: red;
    }
js代码
  <script>
    var list = document.getElementsByClassName("imglist");
    var dian = document.getElementsByClassName("dian")[0].children;
    var timer = null; /*清空计时器*/
    var index = 0;  /*初始化索引值变量*/
    var count = 0; /*用户鼠标点击 点 后旋转的圈数*/
    var isover=true;/*记录动画是否结束——修改bug*/

    /*动画效果——顺时针旋转+点的颜色动画*/
    function animation() {
        timer = setInterval(function () {
            shun_animation();
            addColor();
        }, 1000)
    }
    /*顺时针图片轮播——为了方便鼠标点击 点 后随影图片顺时针效果*/
    function shun_animation() {
        //        记录第0个元素的style
        var Zero = [list[0].style.left, list[0].style.top, list[0].style.zIndex];
        for (var i = 0; i < list.length; i++) {
            if (i < list.length - 1) {
                list[i].style.left = list[i + 1].style.left;
                list[i].style.top = list[i + 1].style.top;
                list[i].style.zIndex = list[i + 1].style.zIndex;
            }
            else {
                list[i].style.left = Zero[0];
                list[i].style.top = Zero[1];
                list[i].style.zIndex = Zero[2];
            }
            if (list[i].style.zIndex == 5) {/*获取当前最高层的索引*/
                index = i;
            }
        }
    }
    //    鼠标进入离开事件
    function Mouse() {
        for (var i = 0; i < list.length; i++) {
            list[i].onmouseenter = function () {
                //停止计时器
                clearInterval(timer);
            }
            list[i].onmouseleave = function () {
                animation();
            }
        }
    }
    //添加点的颜色
    function addColor() {/*封装后初始化调用 鼠标点击调用*/
        for (var i = 0; i < dian.length; i++) {
            if (i == index) {
                dian[i].className = "bgcolor";
            }
            else {
                dian[i].className = "";//classname js中严格区分大小写!!!
            }
        }
    }
    //进入点后的事件
    /*
     * 1. 进入离开后停止或继续动画效果
     * 2. 进入后颜色变化!!调用之前定义的添加颜色函数,对应上索引!
     * 3. 点对应图片变化
     * */
    function addDianevent() {
        for (var i = 0; i < dian.length; i++) {
            dian[i].index = i;/*记录索引*/
            /*鼠标进入事件*/
            dian[i].onmouseenter = function () {
                clearInterval(timer);/*在return 之前清除计时器,否则计时器累加*/
                if(isover){
                    isover=false;
                }
                else{
                    return;
                }

                count = this.index - index;
                /*???获取前一个的索引值*/
                    /*count可能为正  可能为负*/
                /* 1. 正值:顺时针动画 执行 dian.length-count次   负值:顺时针执行动画负数的绝对值次
                     * 2.  如果直接用for循环执行count次  动画效果太快,至少需要0.1秒
                     * 3.  用方法loop函数递归调用延迟输出后发现顺时针函数里还有addColor方法,重复调用,所以将addcolor方法写在animater函数中
                     * */

                    var x = 0;
                    if (this.index > index) {
                        x = dian.length - count;
                    }
                    else if (this.index < index) {
                        x = index - this.index;
                    }
//                递归控制旋转次数
                var num = 0;
                    loop();
                    function loop() {
                        num++;
                        if (num > x) {
                            console.log("动画完成");//动画完成后输出
                            isover = true;
                            return;
                        }
                        shun_animation();
                        setTimeout(loop, 100);
                    }
                index = this.index;
                /*当前点击索引赋值给变量*/
                addColor();/*变色*/
                }
            // 鼠标离开
            dian[i].onmouseleave = function () {
                animation();
            }
        }
    }
    /*浏览器加载事件*/
    window.onload = function () {
        animation();
        Mouse();
        addColor();
        addDianevent();
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTML本身不支持三维切换轮播图,但可以使用CSS 3D变换和JavaScript实现。以下是一个简单的示例: HTML代码: ``` <div class="carousel"> <div class="carousel-item active"> <img src="image1.jpg"> </div> <div class="carousel-item"> <img src="image2.jpg"> </div> <div class="carousel-item"> <img src="image3.jpg"> </div> </div> ``` CSS代码: ``` .carousel { position: relative; width: 600px; height: 400px; margin: 0 auto; perspective: 1000px; } .carousel-item { position: absolute; width: 100%; height: 100%; transform-style: preserve-3d; transition: transform 1s; } .carousel-item.active { transform: translateZ(0); } .carousel-item.next { transform: rotateY(-90deg) translateZ(200px); } .carousel-item.prev { transform: rotateY(90deg) translateZ(200px); } ``` JavaScript代码: ``` var carousel = document.querySelector('.carousel'); var carouselItems = carousel.querySelectorAll('.carousel-item'); var currentIdx = 0; function showNext() { var nextIdx = (currentIdx + 1) % carouselItems.length; carouselItems[currentIdx].classList.remove('active'); carouselItems[nextIdx].classList.add('next'); setTimeout(function() { carouselItems[nextIdx].classList.remove('next'); carouselItems[nextIdx].classList.add('active'); }, 1000); currentIdx = nextIdx; } function showPrev() { var prevIdx = (currentIdx - 1 + carouselItems.length) % carouselItems.length; carouselItems[currentIdx].classList.remove('active'); carouselItems[prevIdx].classList.add('prev'); setTimeout(function() { carouselItems[prevIdx].classList.remove('prev'); carouselItems[prevIdx].classList.add('active'); }, 1000); currentIdx = prevIdx; } setInterval(showNext, 5000); ``` 说明: - `.carousel`是轮播图容器,设置`perspective`为1000px可以让3D变换更加逼真。 - `.carousel-item`是轮播图项,使用`transform-style: preserve-3d`启用3D变换,并且在`.active`、`.next`和`.prev`三种状态下分别设置不同的变换。 - `showNext()`和`showPrev()`函数分别用于展示下一张和上一张图片,通过添加和移除不同的类来触发3D变换动画。 - 最后使用`setInterval()`函数定时调用`showNext()`函数,实现自动轮播
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值