3D跑马灯效果

Posted 悠悠洛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3D跑马灯效果相关的知识,希望对你有一定的参考价值。

  睡了13个小时,发烧终于退了,这一周一直在看perspective的一些资料,写一个3D跑马灯的效果。

  技术分享

  

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>3D跑马灯</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="format-detection" content="telephone=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<style>
/*css reset*/
html{font-family:"Helvetica Neue",Helvetica,STHeiTi,sans-serif;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;}
body{-webkit-overflow-scrolling:touch;margin:0;}
ul{margin:0;padding:0;list-style:none;outline:none;}
dl,dd{margin:0;}
a{display:inline-block;margin:0;padding:0;text-decoration:none;background:transparent;outline:none;color:#000;}
a:link,a:visited,a:hover,a:active{text-decoration:none;color:currentColor;}
a,dt,dd{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;}
img{border:0;}
p{margin:0;}
input,button,select,textarea{margin:0;padding:0;border:0;outline:0;background-color:transparent;}

/*css*/
body {
    height: 100vh;
    text-align: center;
}
.stage {
    position: relative;
    display: inline-block;
    margin: 0 auto;
    padding: 40px 0;
    max-width: 750px;
    perspective: 600px;
    
}
.stage .container {
    position: absolute;
    width: 100px;
    height: 100px;
    transform-style: preserve-3d;
}

.stage .container .list {
    position: absolute;
    width: 100px;
    height: 100px;
    font-size: 14px;
    text-align: center;
    line-height: 100px;
    /*backface-visibility:hidden;*/
    background-color: #22bfe0;
}
</style>
</head>
<body>
<div class="stage">
    <ul id="container" class="container">
    </ul>
</div>
<script>
    var doc = document,
        fragment = doc.createDocumentFragment(),
        $ = function(node) {
            return doc.querySelector(node);
        };

    var listArr = [0, 1, 2, 3, 4, 5, 6, 7],
        length = listArr.length,
        averRotate = 360 / length,
        averTransZ = 60 / Math.tan((averRotate / 2 / 180) * Math.PI);

    listArr.forEach(function(i) {
        var node = doc.createElement(li);
        node.setAttribute(id, list + i);
        node.setAttribute(class, list);
        node.innerHTML = i;
        fragment.appendChild(node);
    });
    $(.container).appendChild(fragment);

    listArr.forEach(function(i) {
        $("#list" + i).style.transform = "rotateY(" + i * averRotate +"deg) translateZ(" + (averTransZ + 20) +"px)";
    });

    var index = 0;
    setInterval(function() {
        $("#container").style.transform = "rotateY(" + ++index + "deg)";
    }, 1000 / 60)
</script>
</body>
</html>

 

以上是关于3D跑马灯效果的主要内容,如果未能解决你的问题,请参考以下文章

使用ivx的3D世界实现跑马灯效果的经验总结

如何用纯 CSS 创作一个 3D 文字跑马灯特效

jQuery+CSS3文字跑马灯特效

使用animation动画制作走马灯效果

网页中图片跑马灯上下滚动的效果怎样可以让他跑一下停一下再跑一下,代码怎么写?

跑马灯小效果