• HTML5特效~3D立方体旋转


     先欣赏一下该特效的最终效果

    本文源码参考自http://www.cnblogs.com/ECJTUACM-873284962/进行一点点优化,下面是对此特效原理上的的剖析.

    该特效是基于Css3的一些新特性拼接而成.主要用到了hover,transform和@keyframe属性.下面简述一下这三个属性的作用.

    详情参考http://www.w3school.com.cn/css3/index.asp

    hover

    效果:当鼠标移到元素上时会展现你定义的hover的样式

    使用方法:假定我们有一个类,名为mystyle.修改它的css样式的方式是.mystyle{}.修改它的css hover样式的方式是.mystyle:hover{}.

    transform

    效果:对元素进行旋转、缩放、移动或倾斜

    使用方法:传入旋转rotate(angle),缩放scale(x,y),移动translate(x,y),倾斜skew(angle)的参数进行属性的修改

    @keyframe

    效果:实现动画效果

    使用方法:@keyframe 后+动画名{from:初始状态;to:末状态}

    为了方便理解,我们先看一张图片旋转的demo版

    代码解析

    <style>
        /*实现立体效果*/
        .img {
            width: 50px;
            height: 50px;
            margin: 0 auto;
            transform-style: preserve-3d;
            /*设置动画播放样式:动画对象 播放速度 时间 播放次数*/
            animation: rotate linear 20s infinite;
        }
        /*实现动画效果*/
        @-webkit-keyframes rotate {                /*sofari chrome*/
            from {
                transform: rotateX(0deg) rotateY(0deg);
            }
            to {
                transform: rotateX(360deg) rotateY(360deg);
            }
        }
        /*图片样式*/
        .pic{
            width: 200px;
            height: 200px;
            transform: rotateY(0deg) translateZ(100px);
        }
    </style>

    接下来是特效实现的完整代码

    <div class="wrap">
        <!--部署内外层图片-->
        <div class="cube">
            <!--前面图片 -->
            <div class="out_front">
                <img src="https://i.loli.net/2018/10/04/5bb5f270969f2.jpeg" class="pic">
            </div>
            <!--后面图片 -->
            <div class="out_back">
                <img src="https://i.loli.net/2018/10/04/5bb5f23ce7f1e.jpg" class="pic">
            </div>
            <!--左面图片 -->
            <div class="out_left">
                <img src="https://i.loli.net/2018/10/04/5bb5f26e13b28.jpg" class="pic">
            </div>
            <!--右面图片 -->
            <div class="out_right">
                <img src="https://i.loli.net/2018/10/07/5bb9b1ca97948.jpg" class="pic">
            </div>
            <!--上面图片 -->
            <div class="out_top">
                <img src="https://i.loli.net/2018/10/04/5bb5f2725c5c7.jpg" class="pic">
            </div>
            <!--下面图片 -->
            <div class="out_bottom">
                <img src="https://i.loli.net/2018/10/04/5bb5f27af2e28.jpg" class="pic">
            </div>
    
            <!--小正方体 -->
            <span class="in_front">
                    <img src="https://i.loli.net/2018/10/07/5bb9b2e441d7a.jpg" class="in_pic">
                </span>
            <span class="in_back">
                     <img src="https://i.loli.net/2018/10/07/5bb9b2e712b3f.jpg" class="in_pic">
                </span>
            <span class="in_left">
                    <img src="https://i.loli.net/2018/10/07/5bb9b2e86ad25.jpg" class="in_pic">
                </span>
            <span class="in_right">
                    <img src="https://i.loli.net/2018/10/07/5bb9b2eaba148.jpg" class="in_pic">
                </span>
            <span class="in_top">
                    <img src="https://i.loli.net/2018/10/07/5bb9b2ebe5bd9.jpg" class="in_pic">
                </span>
            <span class="in_bottom">
                    <img src="https://i.loli.net/2018/10/07/5bb9b2ed867be.jpg" class="in_pic">
                </span>
    
        </div>
        <style>
            /*最外层容器样式*/
            .wrap {
                width: 100px;
                height: 100px;
                margin: 150px;
                position: relative;
            }
    
            /*得到立方体效果*/
            .cube {
                width: 50px;
                height: 50px;
                margin: 0 auto;
                transform-style: preserve-3d;
                /*设置动画播放样式:动画对象 播放速度 时间 播放次数*/
                animation: rotate linear 20s infinite;
            }
    
            /*动画旋转的方式*/
            /*得到动画效果*/
            @-moz-keyframes rotate {                     /*firefox*/
                from {
                    transform: rotateX(0deg) rotateY(0deg);
                }
                to {
                    transform: rotateX(360deg) rotateY(360deg);
                }
            }
            @-webkit-keyframes rotate {                /*sofari chrome*/
                from {
                    transform: rotateX(0deg) rotateY(0deg);
                }
                to {
                    transform: rotateX(360deg) rotateY(360deg);
                }
            }
            @-o-keyframes rotate {                    /*opera*/
                from {
                    transform: rotateX(0deg) rotateY(0deg);
                }
                to {
                    transform: rotateX(360deg) rotateY(360deg);
                }
            }
            /*每张图片的样式*/
            .cube div {
                position: absolute;
                width: 200px;
                height: 200px;
                opacity: 0.8;
                /*过渡效果*/
                transition: all .4s;
            }
    
            /*定义所有图片样式*/
            .pic {
                width: 200px;
                height: 200px;
            }
    
            .cube .out_front {
                transform: rotateY(0deg) translateZ(100px);
            }
    
            .cube .out_back {
                transform: translateZ(-100px) rotateY(180deg);
            }
    
            .cube .out_left {
                transform: rotateY(-90deg) translateZ(100px);
            }
    
            .cube .out_right {
                transform: rotateY(90deg) translateZ(100px);
            }
    
            .cube .out_top {
                transform: rotateX(90deg) translateZ(100px);
            }
    
            .cube .out_bottom {
                transform: rotateX(-90deg) translateZ(100px);
            }
    
            /*定义小正方体样式*/
            .cube span {
                display: block;
                width: 100px;
                height: 100px;
                position: absolute;
                top: 50px;
                left: 50px;
            }
    
            .cube .in_pic {
                width: 100px;
                height: 100px;
            }
    
            .cube .in_front {
                transform: rotateY(0deg) translateZ(50px);
            }
    
            .cube .in_back {
                transform: translateZ(-50px) rotateY(180deg);
            }
    
            .cube .in_left {
                transform: rotateY(-90deg) translateZ(50px);
            }
    
            .cube .in_right {
                transform: rotateY(90deg) translateZ(50px);
            }
    
            .cube .in_top {
                transform: rotateX(90deg) translateZ(50px);
            }
    
            .cube .in_bottom {
                transform: rotateX(-90deg) translateZ(50px);
            }
    
            /*鼠标移入后样式*/
            .cube:hover .out_front {
                transform: rotateY(0deg) translateZ(200px);
            }
    
            .cube:hover .out_back {
                transform: translateZ(-200px) rotateY(180deg);
            }
    
            .cube:hover .out_left {
                transform: rotateY(-90deg) translateZ(200px);
            }
    
            .cube:hover .out_right {
                transform: rotateY(90deg) translateZ(200px);
            }
    
            .cube:hover .out_top {
                transform: rotateX(90deg) translateZ(200px);
            }
    
            .cube:hover .out_bottom {
                transform: rotateX(-90deg) translateZ(200px);
            }
        </style>
    </div>

    觉得文章不错,点个赞和关注吧.

  • 相关阅读:
    Element ui TimePicker 开始时间不得小于结束时间
    Vue 使用print.js实现前端打印功能
    vue中props的默认写法
    Element Cascader 级联选择器 选择第一级 label标题选择 内容过多
    vue 定时器 不断切换组件 定时器越来越快的问题
    Vue 全局组件传递参数
    echarts渐变发光半圆仪表盘
    左侧折叠菜单在sessionStorage中保存左侧菜单的激活状态
    Vue 封装网络工具类
    .browserslistrc 配置兼容浏览器
  • 原文地址:https://www.cnblogs.com/Lazy-Cat/p/9750244.html
Copyright © 2020-2023  润新知