CSS3动画结合js实现3D轮播

昨天晚上有个同行提出要做一个旋转式的3D轮播图(下面统称banner图)。我就为了帮他看了一下相关的技术贴发现符合要求的很少,所以只能自己去动手写了。看到有人写了CSS3立体旋转动画的博客,我就想把这个动画拆分成几个模块来做一个banner效果可不可以?最后自己动手写了一下还是可以的。不过这个banner效果还是存在一些bug,因为不是急用所以我也没有修复。以后有空我会修复的。

html部分代码

  <div class="container">
        <div class="carouse" id="carouse">
            <div class="pic1">1</div>
            <div class="pic2">2</div>
            <div class="pic3">3</div>
            <div class="pic4">4</div>
            <div class="pic5">5</div>
            <div class="pic6">6</div>
            <div class="pic7">7</div>
            <div class="pic8">8</div>
            <div class="pic9">9</div>
        </div>
    </div>
    <div class="btn-group">
        <button id="prev">上一个</button>
        <button id="next">下一个</button>
    </div>

css代码

*{
            margin:0;
            padding: 0;
        }
        .container{
            width: 210px;
            height:140px;
            position: relative;
            font-size: 32px;
            color: #FFFFFF;
            text-align: center;
            line-height: 90px;
            margin: 200px auto;
            perspective: 1000px;
        }
        .carouse{
            transform-style:preserve-3d;

        }
        .carouse div{
            display: block;
            position: absolute;
            width: 140px;
            height: 90px;
            border: 2px solid black;
        }
        .btn-group{
            display: block;
            margin:100px auto;
            width: 240px;
            height: 30px;
        }
        .btn-group button{
            width: 80px;
            height: 100%;
        }

        .carouse .pic1{
            background:rgba(255,9,15,0.7);
            transform: rotateY(0deg) translateZ(210px);
        }
        .carouse .pic2{
            background:rgba(100,9,100,0.7);
            transform: rotateY(40deg) translateZ(210px);
        }
        .carouse .pic3{
            background:rgba(50,50,15,0.7);
            transform: rotateY(80deg) translateZ(210px);
        }
        .carouse .pic4{
            background:rgba(150,100,200,0.7);
            transform: rotateY(120deg) translateZ(210px);
        }
        .carouse .pic5{
            background:rgba(120,120,120,0.7);
            transform: rotateY(160deg) translateZ(210px);
        }
        .carouse .pic6{
            background:rgba(110,9,250,0.7);
            transform: rotateY(200deg) translateZ(210px);
        }
        .carouse .pic7{
            background:rgba(80,200,15,0.7);
            transform: rotateY(240deg) translateZ(210px);
        }
        .carouse .pic8{
            background:rgba(180,150,100,0.7);
            transform: rotateY(280deg) translateZ(210px);
        }
        .carouse .pic9{
            background:rgba(255,150,0,0.7);
            transform: rotateY(320deg) translateZ(210px);
        }

        /*=== 下一个动画 ===*/
        @keyframes to-scroll1 {
            0%{
                transform: rotateY(0deg);
            }

            100%{
                transform: rotateY(-40deg);

            }

        }
        #carouse1{
            animation: to-scroll1  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll2 {
            0%{
                transform: rotateY(-40deg);
            }

            100%{
                transform: rotateY(-80deg);

            }

        }
        #carouse2{
            animation: to-scroll2  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll3 {
            0%{
                transform: rotateY(-80deg);
            }

            100%{
                transform: rotateY(-120deg);

            }

        }
        #carouse3{
            animation: to-scroll3  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll4 {
            0%{
                transform: rotateY(-120deg);
            }

            100%{
                transform: rotateY(-160deg);

            }

        }
        #carouse4{
            animation: to-scroll4  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll5 {
            0%{
                transform: rotateY(-160deg);
            }

            100%{
                transform: rotateY(-200deg);

            }

        }
        #carouse5{
            animation: to-scroll5  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll6 {
            0%{
                transform: rotateY(-200deg);
            }

            100%{
                transform: rotateY(-240deg);

            }

        }
        #carouse6{
            animation: to-scroll6  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll7 {
            0%{
                transform: rotateY(-240deg);
            }

            100%{
                transform: rotateY(-280deg);

            }

        }
        #carouse7{
            animation: to-scroll7  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll8 {
            0%{
                transform: rotateY(-280deg);
            }

            100%{
                transform: rotateY(-320deg);

            }

        }
        #carouse8{
            animation: to-scroll8  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll9 {
            0%{
                transform: rotateY(-320deg);
            }

            100%{
                transform: rotateY(-360deg);

            }

        }
        #carouse9{
            animation: to-scroll9  2s ease both;
            /*animation-fill-mode: both;*/
        }

       /* @keyframes to-scroll10 {
            0%{
                transform: rotateY(-360deg);
            }

            100%{
                transform: rotateY(-400deg);

            }

        }
        #carouse10{
            animation: to-scroll10  2s ease both;
            /*animation-fill-mode: both;*/
        }*/

        /* === 上一个动画 ===*/

        @keyframes to-scroll21 {
            0%{
                transform: rotateY(-40deg);
            }

            100%{
                transform: rotateY(0deg);

            }

        }
        #carouse21{
            animation: to-scroll21 2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll22 {
            0%{
                transform: rotateY(-80deg);
            }

            100%{
                transform: rotateY(-40deg);

            }

        }
        #carouse22{
            animation: to-scroll22  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll23 {
            0%{
                transform: rotateY(-120deg);
            }

            100%{
                transform: rotateY(-80deg);

            }

        }
        #carouse23{
            animation: to-scroll23  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll24 {
            0%{
                transform: rotateY(-160deg);
            }

            100%{
                transform: rotateY(-120deg);

            }

        }
        #carouse24{
            animation: to-scroll24  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll25 {
            0%{
                transform: rotateY(-200deg);
            }

            100%{
                transform: rotateY(-160deg);

            }

        }
        #carouse25{
            animation: to-scroll25  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll26 {
            0%{
                transform: rotateY(-240deg);
            }

            100%{
                transform: rotateY(-200deg);

            }

        }
        #carouse26{
            animation: to-scroll26  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll27 {
            0%{
                transform: rotateY(-280deg);
            }

            100%{
                transform: rotateY(-240deg);

            }

        }
        #carouse27{
            animation: to-scroll27  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll28 {
            0%{
                transform: rotateY(-320deg);
            }

            100%{
                transform: rotateY(-280deg);

            }

        }
        #carouse28{
            animation: to-scroll28  2s ease both;
            /*animation-fill-mode: both;*/
        }
        @keyframes to-scroll29 {
            0%{
                transform: rotateY(-360deg);
            }

            100%{
                transform: rotateY(-320deg);

            }

        }
        #carouse29{
            animation: to-scroll29  2s ease both;
            /*animation-fill-mode: both;*/
        }

        @keyframes to-scroll30 {
            0%{
                transform: rotateY(-400deg);
            }

            100%{
                transform: rotateY(-360deg);

            }

        }
        #carouse30{
            animation: to-scrol30  2s ease both;
            /*animation-fill-mode: both;*/
        }

js代码

var prevBut = document.getElementById("prev");
    var nextBut = document.getElementById("next");
    var carouse = document.getElementsByClassName("carouse")
    var state = 1;  //id的变化状态

    prevBut.addEventListener("click",function() {
        prev();
    }) ;

    nextBut.addEventListener("click",function() {
        next();
    }) ;

    function prev(){
        if( state == 1||state == 21){
            state = 29;
            carouse.item(0).id = ‘carouse‘+state;
        }else if(state == 2||state == 22){
            state = 21;
            carouse.item(0).id = ‘carouse‘+state;
        }else if(state == 3 || state == 23){
            state = 22;
            carouse.item(0).id = ‘carouse‘+state;
        }else if(state == 4 || state == 24){
            state = 23;
            carouse.item(0).id = ‘carouse‘+state;
        }else if(state == 5||state == 25){
            state = 24;
            carouse.item(0).id = ‘carouse‘+state;
        }else if(state == 6 || state == 26){
            state = 25;
            carouse.item(0).id = ‘carouse‘+state;
        }else if(state == 7 || state == 27){
            state = 26;
            carouse.item(0).id = ‘carouse‘+state;
        }else if(state == 8||state == 28){
            state = 27;
            carouse.item(0).id = ‘carouse‘+state;
        }else if(state == 9 || state == 29){
            state = 28;
            carouse.item(0).id = ‘carouse‘+state;
        }else if(state == 10 || state == 30){
            state = 29;
            carouse.item(0).id = ‘carouse‘+state;
        }
    }

    function next() {
        if( state == 1||state == 21){
            state = 1;
            carouse.item(0).id = ‘carouse‘+state;
            state++;
        }else if(state == 2||state == 22){
            state = 2;
            carouse.item(0).id = ‘carouse‘+state;
            state++;
        }else if(state == 3 || state == 23){
            state = 3;
            carouse.item(0).id = ‘carouse‘+state;
            state++;
        }else if(state == 4 || state == 24){
            state = 4;
            carouse.item(0).id = ‘carouse‘+state;
            state++;
        }else if(state == 5||state == 25){
            state = 5;
            carouse.item(0).id = ‘carouse‘+state;
            state++;
        }else if(state == 6 || state == 26){
            state = 6;
            carouse.item(0).id = ‘carouse‘+state;
            state++;
        }else if(state == 7 || state == 27){
            state = 7;
            carouse.item(0).id = ‘carouse‘+state;
            state++;
        }else if(state == 8||state == 28){
            state = 8;
            carouse.item(0).id = ‘carouse‘+state;
            state++;
        }else if(state == 9 || state == 29){
            state = 9;
            carouse.item(0).id = ‘carouse‘+state;
            state++;
        }else if(state == 10 || state == 30){
            state = 1;
            carouse.item(0).id = ‘carouse‘+state;
        }
    }

效果图

  

时间: 2024-10-23 01:39:58

CSS3动画结合js实现3D轮播的相关文章

Web全栈之路 1.CSS3中3D立方体以及3D轮播图

1.3D坐标系 3D坐标可以用左手来模拟,其中大拇指方向默认是X轴正方向,食指方向是Y轴正方向,中指方向是Z轴正方向.注意:当设置transform:rotateX(90deg)时,相当于将X轴转动90°,此时Z轴正方向向上,所以设置transform:translateZ(150px)时,就产生了3D立方体的上面,具体原理可以通过chrome浏览器审查元素来调试. 2.3D视图 transform-style:flat(默认,二维效果) / preserve-3d(三维效果).设置一个元素的t

Vue 3D轮播 带缩略图 版本 (+动画 翻卡)

前言 用Vue来写了 移动端 3D轮播 带缩略图  ,在加 动画翻卡效果  ,其实也不是太难吧,也就做了一下午,哈哈, 船到桥头自然直,这样才可以, 首先看下做好的效果图 可以 点击 滑动 ,可以触摸滑动, 可以点击 缩略图滑动, 最后 在点击那个 选中的 翻卡的 那个有翻卡 的3D效果 代码: <template> <section class="container"> <div id="slide" class="slid

3D轮播切换特效 源码

这个3D轮播切换特效是我2017年2月份写的 当初我 刚接触HTML不久,现在把源码分享给大家 源码的注释超级清楚 . <!-- 声明文档类型:html 作用:符合w3c统一标准规范 每个浏览器对html css js都有自己的编码模式(兼容模式)--> 无序列表标签  盒子模型标签  img图片标签四要素 1 <!-- 2 声明文档类型:html 3 作用:符合w3c统一标准规范 4 每个浏览器对html css js都有自己的编码模式(兼容模式) 5 --> 6 <!do

3d轮播图的效果实现

最近工程比较松,所以自己研究了一下3d轮播图的实现原理,其实说白了也不是很难就是在x,y,z轴上的平移和整个平面的旋转变换达到的效果, 下面是实现代码 html部分 <div class="stage"> <div class="contains"> <div style="transform: rotateY(0deg) translateZ(400px);">关于我</div> <div

原生js重写《锋利的JS》之 轮播效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

可视化CSS3动画代码生成js库插件-Bounce.js

简要教程 Bounce.js是一款功能非常强大的可视化CSS3动画代码生成js库插件.该js库插件提供了一个在线APP,通过该APP可以在可视化的条件下编辑CSS3的各种动画效果,如移动.旋转.倾斜.easing等效果,编辑完成后可以直接获取该CSS3帧动画的代码,复制代码到你的页面中即可在你的页面上获得与该动画一样的效果.此外,你也可以单独使用Bounce.js,通过js代码来完成各种CSS3动画效果.Bounce.js能与jQuery完美结合. 查看演示     下载插件 安装 可以通过Bo

用jQuery基于原生js封装的轮播

我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址的数组,图片宽度,上一页,下一页的id,图片列表即ul的id(这儿使用无序列表排列的图片),自动轮播间隔的时间.功能:实现了轮播的自动轮播,可以点击上一页,下一页进行切换. 下面是html中的代码,只需要把存放的容器写好,引入jquery即可: <!DOCTYPE html><html>

Bootstrap的js插件之轮播(carousel)

轮播请查看以下示例,基本已经涵盖最常用的一个轮播 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>js插件_轮播</titl

Bounce.js-可视化CSS3动画代码生成js插件

Bounce.js是一款功能非常强大的可视化CSS3动画代码生成js库插件.该js库插件提供了一个在线APP,通过该APP可以在可视化的条件下编辑CSS3的各种动画效果.此外,你也可以单独使用Bounce.js,通过js代码来完成各种CSS3动画效果. Bounce.js能与jQuery完美结合. 在线演示:http://www.htmleaf.com/Demo/201502231412.html 下载地址:http://www.htmleaf.com/css3/css3donghua/2015