魔方4格滚动加载动画

啥也不说 先上效果图

在这里插入图片描述

完整代码

<!DOCTYPE html>
<html>

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta charset="utf-8">
		<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
		<title>魔方4格滚动加载动画</title>
		<!--<link rel="stylesheet/less" href="./less.less" />
		<script src="https://cdn.bootcss.com/less.js/2.7.2/less.min.js"></script>-->
		<style type="text/css">
			/* 动画 */
			
			@-webkit-keyframes willRotate { 0% { -webkit-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); } 8.3% { -webkit-transform: rotateX(-90deg) rotateY(0deg) rotateZ(0deg); } 16.6% { -webkit-transform: rotateX(-90deg) rotateY(0deg) rotateZ(90deg); } 24.9% { -webkit-transform: rotateX(0deg) rotateY(0deg) rotateZ(90deg); } 33.2% { -webkit-transform: rotateX(0deg) rotateY(-90deg) rotateZ(90deg); } 41.5% { -webkit-transform: rotateX(0deg) rotateY(-90deg) rotateZ(180deg); } 49.8% { -webkit-transform: rotateX(0deg) rotateY(0deg) rotateZ(180deg); } 58.1% { -webkit-transform: rotateX(90deg) rotateY(0deg) rotateZ(180deg); } 66.4% { -webkit-transform: rotateX(90deg) rotateY(0deg) rotateZ(270deg); } 74.7% { -webkit-transform: rotateX(0deg) rotateY(0deg) rotateZ(270deg); } 83% { -webkit-transform: rotateX(0deg) rotateY(90deg) rotateZ(270deg); } 91.3% { -webkit-transform: rotateX(0deg) rotateY(90deg) rotateZ(360deg); } 100% { -webkit-transform: rotateX(0deg) rotateY(0deg) rotateZ(360deg); } }
			
			@-moz-keyframes willRotate { 0% { -moz-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); } 8.3% { -moz-transform: rotateX(-90deg) rotateY(0deg) rotateZ(0deg); } 16.6% { -moz-transform: rotateX(-90deg) rotateY(0deg) rotateZ(90deg); } 24.9% { -moz-transform: rotateX(0deg) rotateY(0deg) rotateZ(90deg); } 33.2% { -moz-transform: rotateX(0deg) rotateY(-90deg) rotateZ(90deg); } 41.5% { -moz-transform: rotateX(0deg) rotateY(-90deg) rotateZ(180deg); } 49.8% { -moz-transform: rotateX(0deg) rotateY(0deg) rotateZ(180deg); } 58.1% { -moz-transform: rotateX(90deg) rotateY(0deg) rotateZ(180deg); } 66.4% { -moz-transform: rotateX(90deg) rotateY(0deg) rotateZ(270deg); } 74.7% { -moz-transform: rotateX(0deg) rotateY(0deg) rotateZ(270deg); } 83% { -moz-transform: rotateX(0deg) rotateY(90deg) rotateZ(270deg); } 91.3% { -moz-transform: rotateX(0deg) rotateY(90deg) rotateZ(360deg); } 100% { -moz-transform: rotateX(0deg) rotateY(0deg) rotateZ(360deg); } }
			
			@-o-keyframes willRotate { 0% { -o-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); } 8.3% { -o-transform: rotateX(-90deg) rotateY(0deg) rotateZ(0deg); } 16.6% { -o-transform: rotateX(-90deg) rotateY(0deg) rotateZ(90deg); } 24.9% { -o-transform: rotateX(0deg) rotateY(0deg) rotateZ(90deg); } 33.2% { -o-transform: rotateX(0deg) rotateY(-90deg) rotateZ(90deg); } 41.5% { -o-transform: rotateX(0deg) rotateY(-90deg) rotateZ(180deg); } 49.8% { -o-transform: rotateX(0deg) rotateY(0deg) rotateZ(180deg); } 58.1% { -o-transform: rotateX(90deg) rotateY(0deg) rotateZ(180deg); } 66.4% { -o-transform: rotateX(90deg) rotateY(0deg) rotateZ(270deg); } 74.7% { -o-transform: rotateX(0deg) rotateY(0deg) rotateZ(270deg); } 83% { -o-transform: rotateX(0deg) rotateY(90deg) rotateZ(270deg); } 91.3% { -o-transform: rotateX(0deg) rotateY(90deg) rotateZ(360deg); } 100% { -o-transform: rotateX(0deg) rotateY(0deg) rotateZ(360deg); } }
			
			@-ms-keyframes willRotate { 0% { -ms-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); } 8.3% { -ms-transform: rotateX(-90deg) rotateY(0deg) rotateZ(0deg); } 16.6% { -ms-transform: rotateX(-90deg) rotateY(0deg) rotateZ(90deg); } 24.9% { -ms-transform: rotateX(0deg) rotateY(0deg) rotateZ(90deg); } 33.2% { -ms-transform: rotateX(0deg) rotateY(-90deg) rotateZ(90deg); } 41.5% { -ms-transform: rotateX(0deg) rotateY(-90deg) rotateZ(180deg); } 49.8% { -ms-transform: rotateX(0deg) rotateY(0deg) rotateZ(180deg); } 58.1% { -ms-transform: rotateX(90deg) rotateY(0deg) rotateZ(180deg); } 66.4% { -ms-transform: rotateX(90deg) rotateY(0deg) rotateZ(270deg); } 74.7% { -ms-transform: rotateX(0deg) rotateY(0deg) rotateZ(270deg); } 83% { -ms-transform: rotateX(0deg) rotateY(90deg) rotateZ(270deg); } 91.3% { -ms-transform: rotateX(0deg) rotateY(90deg) rotateZ(360deg); } 100% { -ms-transform: rotateX(0deg) rotateY(0deg) rotateZ(360deg); } }
			
			@keyframes willRotate { 0% { transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); } 8.3% { transform: rotateX(-90deg) rotateY(0deg) rotateZ(0deg); } 16.6% { transform: rotateX(-90deg) rotateY(0deg) rotateZ(90deg); } 24.9% { transform: rotateX(0deg) rotateY(0deg) rotateZ(90deg); } 33.2% { transform: rotateX(0deg) rotateY(-90deg) rotateZ(90deg); } 41.5% { transform: rotateX(0deg) rotateY(-90deg) rotateZ(180deg); } 49.8% { transform: rotateX(0deg) rotateY(0deg) rotateZ(180deg); } 58.1% { transform: rotateX(90deg) rotateY(0deg) rotateZ(180deg); } 66.4% { transform: rotateX(90deg) rotateY(0deg) rotateZ(270deg); } 74.7% { transform: rotateX(0deg) rotateY(0deg) rotateZ(270deg); } 83% { transform: rotateX(0deg) rotateY(90deg) rotateZ(270deg); } 91.3% { transform: rotateX(0deg) rotateY(90deg) rotateZ(360deg); } 100% { transform: rotateX(0deg) rotateY(0deg) rotateZ(360deg); } }
			/* 动画 end */
			/* checkerboard */
			
			.checkerboard {
				width: 200px;
				height: 200px;
				margin-top: 100px;
				margin-left: 100px;
				position: relative;
				-webkit-transform: rotateX(45deg) rotateY(0deg) rotateZ(45deg);
				-moz-transform: rotateX(45deg) rotateY(0deg) rotateZ(45deg);
				-ms-transform: rotateX(45deg) rotateY(0deg) rotateZ(45deg);
				transform: rotateX(45deg) rotateY(0deg) rotateZ(45deg);
				-webkit-transform-origin: 50px 50px;
				-moz-transform-origin: 50px 50px;
				-ms-transform-origin: 50px 50px;
				transform-origin: 50px 50px;
				-webkit-transform-style: preserve-3d;
				-moz-transform-style: preserve-3d;
				-ms-transform-style: preserve-3d;
				transform-style: preserve-3d;
			}
			
			.checkerboard__cell {
				box-sizing: border-box;
				float: left;
				width: 100px;
				height: 100px;
				border: 1px black solid;
				-webkit-transform: translateZ(-50px);
				-moz-transform: translateZ(-50px);
				-ms-transform: translateZ(-50px);
				transform: translateZ(-50px);
			}
			/* checkerboard end */
			/* rotateBox */
			
			.rotate {
				position: absolute;
				display: block;
				width: 100px;
				height: 100px;
				padding: 0;
				margin: 0;
				-webkit-transform-origin: 100% 100% -50px;
				-moz-transform-origin: 100% 100% -50px;
				-ms-transform-origin: 100% 100% -50px;
				transform-origin: 100% 100% -50px;
				-webkit-transform-style: preserve-3d;
				-moz-transform-style: preserve-3d;
				-ms-transform-style: preserve-3d;
				transform-style: preserve-3d;
			}
			
			.rotate__surface {
				position: absolute;
				display: block;
				width: 100px;
				height: 100px;
				-webkit-backface-visibility: hidden;
				backface-visibility: visible;
			}
			
			.rotate__surface--front {
				-webkit-transform: translateZ(50px);
				-moz-transform: translateZ(50px);
				-ms-transform: translateZ(50px);
				transform: translateZ(50px);
				background-color: #0000ff;
			}
			
			.rotate__surface--back {
				-webkit-transform: rotateY(180deg) translateZ(50px);
				-moz-transform: rotateY(180deg) translateZ(50px);
				-ms-transform: rotateY(180deg) translateZ(50px);
				transform: rotateY(180deg) translateZ(50px);
				background-color: #008000;
			}
			
			.rotate__surface--right {
				-webkit-transform: rotateY(90deg) translateZ(50px);
				-moz-transform: rotateY(90deg) translateZ(50px);
				-ms-transform: rotateY(90deg) translateZ(50px);
				transform: rotateY(90deg) translateZ(50px);
				background-color: #ff0000;
			}
			
			.rotate__surface--left {
				-webkit-transform: rotateY(-90deg) translateZ(50px);
				-moz-transform: rotateY(-90deg) translateZ(50px);
				-ms-transform: rotateY(-90deg) translateZ(50px);
				transform: rotateY(-90deg) translateZ(50px);
				background-color: #f07810;
			}
			
			.rotate__surface--top {
				-webkit-transform: rotateX(90deg) translateZ(50px);
				-moz-transform: rotateX(90deg) translateZ(50px);
				-ms-transform: rotateX(90deg) translateZ(50px);
				transform: rotateX(90deg) translateZ(50px);
				background-color: #ffff00;
			}
			
			.rotate__surface--bottom {
				-webkit-transform: rotateX(-90deg) translateZ(50px);
				-moz-transform: rotateX(-90deg) translateZ(50px);
				-ms-transform: rotateX(-90deg) translateZ(50px);
				transform: rotateX(-90deg) translateZ(50px);
				background-color: #ffffff;
			}
			
			#rotateBoxA {
				-webkit-animation: willRotate 6s linear infinite normal;
				-moz-animation: willRotate 6s linear infinite normal;
				-ms-animation: willRotate 6s linear infinite normal;
				animation: willRotate 6s linear infinite normal;
			}
			/* rotateBox end */
		</style>
	</head>

	<body>
		<div class="checkerboard">
			<div class="checkerboard__cell"></div>
			<div class="checkerboard__cell"></div>
			<div class="checkerboard__cell"></div>
			<div class="checkerboard__cell"></div>
			<div class="rotate" id="rotateBoxA">
				<div class="rotate__surface rotate__surface--front"></div>
				<div class="rotate__surface rotate__surface--back"></div>
				<div class="rotate__surface rotate__surface--right"></div>
				<div class="rotate__surface rotate__surface--left"></div>
				<div class="rotate__surface rotate__surface--top"></div>
				<div class="rotate__surface rotate__surface--bottom"></div>
			</div>
		</div>
	</body>

</html>

less源码

完整案例的 css 是由 less 编译的, less 源码如下

//@import "../../mine/less/_animation.less";
.pre(@style, @value) {
    -webkit-@{style}: @value;
    -moz-@{style}: @value;
    -ms-@{style}: @value;
    @{style}: @value;
}

.transition(@arg) {
    .pre(transition, @arg);
}

.transition-delay(@delay: 0) {
    .pre(transition-delay, @delay);
}

.transition-duration(@duration: 200ms) {
    .pre(transition-duration, @duration);
}

.transition-property(@property: all) {
    .pre(transition-property, @property);
}

.transition-timing-function(@function: ease) {
    .pre(transition-timing-function, @function);
}

.transform(@arg) {
    .pre(transform, @arg);
}

.transform-origin(@args) {
    .pre(transform-origin, @args);
}

.transform-style(@style) {
    .pre(transform-style, @style);
}

.rotate(@deg: 45deg) {
    .transform(rotate(@deg));
}

.scale(@factor: .5) {
    .transform(scale(@factor));
}

.translate(@x, @y) {
    .transform(translate(@x, @y));
}

.translate3d(@x, @y, @z) {
    .transform(translate3d(@x, @y, @z));
}

.translateHardware(@x, @y) {
    .translate(@x, @y);
    .pre(transform, translate3d(@x, @y, 0));
}

.animation(@value) {
    .pre(animation, @value);
}

.keyframes(@name) {
    @-webkit-keyframes @name {
        .-frames(-webkit-)
    }
    @-moz-keyframes @name {
        .-frames(-moz-)
    }
    @-o-keyframes @name {
        .-frames(-o-)
    }
    @-ms-keyframes @name {
        .-frames(-ms-)
    }
    @keyframes @name {
        .-frames()
    }
}

//以上是 animation.less 提供的方法

/* 动画 */

.willRotate {
    .keyframes(willRotate);
    .-frames(@-...) {
        0% {
            @{-}transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg);
        }
        8.3% {
            @{-}transform: rotateX(-90deg) rotateY(0deg) rotateZ(0deg);
        }
        16.6% {
            @{-}transform: rotateX(-90deg) rotateY(0deg) rotateZ(90deg);
        }
        24.9% {
            @{-}transform: rotateX(0deg) rotateY(0deg) rotateZ(90deg);
        }
        33.2% {
            @{-}transform: rotateX(0deg) rotateY(-90deg) rotateZ(90deg);
        }
        41.5% {
            @{-}transform: rotateX(0deg) rotateY(-90deg) rotateZ(180deg);
        }
        49.8% {
            @{-}transform: rotateX(0deg) rotateY(0deg) rotateZ(180deg);
        }
        58.1% {
            @{-}transform: rotateX(90deg) rotateY(0deg) rotateZ(180deg);
        }
        66.4% {
            @{-}transform: rotateX(90deg) rotateY(0deg) rotateZ(270deg);
        }
        74.7% {
            @{-}transform: rotateX(0deg) rotateY(0deg) rotateZ(270deg);
        }
        83% {
            @{-}transform: rotateX(0deg) rotateY(90deg) rotateZ(270deg);
        }
        91.3% {
            @{-}transform: rotateX(0deg) rotateY(90deg) rotateZ(360deg);
        }
        100% {
            @{-}transform: rotateX(0deg) rotateY(0deg) rotateZ(360deg);
        }
    }
}


/* 动画 end */


/* checkerboard */

.checkerboard {
    width: 200px;
    height: 200px;
    margin-top: 100px;
    margin-left: 100px;
    position: relative;
    .pre(transform, rotateX(45deg) rotateY(0deg) rotateZ(45deg));
    .transform-origin(50px 50px);
    .transform-style(preserve-3d);
    &__cell {
        box-sizing: border-box;
        float: left;
        width: 100px;
        height: 100px;
        border: 1px black solid;
        .pre(transform, translateZ(-50px));
    }
}


/* checkerboard end */


/* rotateBox */

.rotate {
    position: absolute;
    display: block;
    width: 100px;
    height: 100px;
    padding: 0;
    margin: 0;
    .transform-origin(100% 100% -50px);
    .transform-style(preserve-3d);
    &__surface {
        position: absolute;
        display: block;
        width: 100px;
        height: 100px;
        -webkit-backface-visibility: hidden;
        backface-visibility: visible;
        //      background: radial-gradient(transparent 30%, rgba(94, 126, 17, 0.25) 100%);
        &--front {
            .pre(transform, translateZ(50px));
            background-color: #0000ff;
        }
        &--back {
            .pre(transform, rotateY(180deg) translateZ(50px));
            background-color: #008000;
        }
        &--right {
            .pre(transform, rotateY(90deg) translateZ(50px));
            background-color: #ff0000;
        }
        &--left {
            .pre(transform, rotateY(-90deg) translateZ(50px));
            background-color: #f07810;
        }
        &--top {
            .pre(transform, rotateX(90deg) translateZ(50px));
            background-color: #ffff00;
        }
        &--bottom {
            .pre(transform, rotateX(-90deg) translateZ(50px));
            background-color: #ffffff;
        }
    }
}

#rotateBoxA {
    .animation(willRotate 6s linear infinite normal);
}


/* rotateBox end */

end

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值