<div class="container">
    <div> <figure></figure> <figure></figure> <figure></figure> <figure></figure> </div>
    <div><figure></figure><figure></figure><figure></figure><figure></figure></div>
    <div><figure></figure><figure></figure><figure></figure><figure></figure></div>
</div>
<style>
*{
    /* 3D 加速 */
    transform-style:preserve-3d;
}
body{
    background:black;
}
.container{
    width:200px;
    height:200px;
    position:relative;
    margin:200px auto;

    /* preserve-3d是在做3d转换的时候用到的,然后就会有Z轴的3d转换效果,

    如果不设置或者设置成flat看到的只是一个平面上的变换 */

    transform-style:preserve-3d;
}
.container div{
    width:200px;
    height:200px;
    position:absolute;
}

.container div:nth-child(1){
    transform:rotateX(90deg);
}

.container div:nth-child(2){
    transform:rotateY(90deg);
}

@keyframes rotate{
    from{
        transform: rotateY(0deg);
    }
    to{
        transform: rotateY(360deg);
    }
}

/** 每个div 有4个 figure*/
figure{
    width:100%;
    height:100%;
    margin:0;
    position:absolute;
    background:url(http://img.duoziwang.com/2016/09/02/15483442009.jpg) no-repeat;

    /**把背景图像扩展至足够大,以使背景图像完全覆盖背景区域。**/
    background-size:cover;
}

figure:nth-child(1){
    /** 有些时候需要实现一些倒影的效果。比如说,你看到一个美女,
    你想从另一个角度来看这个MM的风姿 。  **/
    -webkit-box-reflect:above;
}
figure:nth-child(2){
    /* 下倒影, 就像走在湖面上的效果 */

    -webkit-box-reflect:below;
}
figure:nth-child(3){
    -webkit-box-reflect:left;
}
figure:nth-child(4){
    -webkit-box-reflect:right;
}

body{
    animation: rotate 2s linear infinite;

    transform-orgin:50% 200px;
}

html{
    overflow:hidden;
}

</style>
<script>

var div = document.querySelector('div');
var flag = false;// 是否启动拖拽

document.addEventListener('mousedown', function() {
    flag = true;

    document.body.style.setProperty('animation-play-state', 'paused');

}, false);

document.addEventListener('mouseup', function() {
    flag = false;

    document.body.style.setProperty('animation-play-state', 'running');

}, false);

document.addEventListener('mousemove', function move(e) {
    if (!flag) {
        move.lastX = e.x;
        move.lastY = e.y;
        return;
    }
    var transform = getComputedStyle(div).getPropertyValue('transform');

    transform == 'none' && (transform = '');

    div.style.setProperty('transform', transform + 'rotateX(' + (move.lastY - e.y) / 5 + 'deg) rotateY(' + (e.x - move.lastX) / 5 + 'deg)');

    move.lastX = e.x;
    
    move.lastY = e.y;

}, false);

</script>