zoukankan      html  css  js  c++  java
  • JS框架_(JQuery.js)绚丽的3D星空动画

    百度云盘:  传送门  密码:8ft8

    绚丽的3D星空动画效果(纯CSS)

    (3D星空动画可以用作网页背景,Gary为文本文字)

    <!doctype html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>jQuery和CSS3超绚丽的3D星空动画特效</title>
        <script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script>
        <script src='js/prefixfree.min.js'></script>
        <style class="cp-pen-styles">
        
        p {
              position: fixed;
              top: 50%;
              left: 0;
              right: 0;
              text-align: center;
              transform: translateY(-50%);
              font-size: 40px;
              font-weight: 900;
              color: white;
              text-shadow: 0 0 50px black;
              text-transform: capitalize;
              font-family: 'Roboto','Helvetica','Arial',sans-serif;
              letter-spacing: 5px;
        }
        
        body {
          background: radial-gradient(200% 100% at bottom center, #0070aa, #0b2570, #000035, #000);
          background: radial-gradient(220% 105% at top center, #000 10%, #000035 40%, #0b2570 65%, #0070aa);
          background-attachment: fixed;
          overflow: hidden;
        }
        
        
    
        @keyframes rotate {
          0% {
            transform: perspective(400px) rotateZ(20deg) rotateX(-40deg) rotateY(0);
          }
          100% {
            transform: perspective(400px) rotateZ(20deg) rotateX(-40deg) rotateY(-360deg);
          }
        }
        .stars {
          transform: perspective(500px);
          transform-style: preserve-3d;
          position: absolute;
          bottom: 0;
          perspective-origin: 50% 100%;
          left: 50%;
          animation: rotate 90s infinite linear;
        }
    
        .star {
          width: 2px;
          height: 2px;
          background: #F7F7B6;
          position: absolute;
          top: 0;
          left: 0;
          transform-origin: 0 0 -300px;
          transform: translate3d(0, 0, -300px);
          backface-visibility: hidden;
        }
        </style>
    </head>
    <body>
        
        <p>Gary</p>
        <div class="stars">
              
        </div>
        <script src='js/stopExecutionOnTimeout.js'></script>
        
        <script>
        $(document).ready(function () {
            var stars = 800;
            var $stars = $('.stars');
            var r = 800;
            for (var i = 0; i < stars; i++) {
                if (window.CP.shouldStopExecution(1)) {
                    break;
                }
                var $star = $('<div/>').addClass('star');
                $stars.append($star);
            }
            window.CP.exitedLoop(1);
            $('.star').each(function () {
                var cur = $(this);
                var s = 0.2 + Math.random() * 1;
                var curR = r + Math.random() * 300;
                cur.css({
                    transformOrigin: '0 0 ' + curR + 'px',
                    transform: ' translate3d(0,0,-' + curR + 'px) rotateY(' + Math.random() * 360 + 'deg) rotateX(' + Math.random() * -50 + 'deg) scale(' + s + ',' + s + ')'
                });
            });
        });
    
        </script>
    </body>
    </html>
    index.html

    (使用了三个框架)

      jquery.min

      prefixfree.min

      stopExecutionOnTimeout

    实现过程

    CSS

    星空渐变背景

        body {
          background: radial-gradient(200% 100% at bottom center, #0070aa, #0b2570, #000035, #000);
          background: radial-gradient(220% 105% at top center, #000 10%, #000035 40%, #0b2570 65%, #0070aa);
          background-attachment: fixed;
          overflow: hidden;
        }

     background:设置星空夜晚渐变效果(也不知道他们是怎么测试出来的)

    background-attachment :指定一个固定的背景图像

      fixed 背景图像是固定的

    星空(一颗)

        .star {
           2px;
          height: 2px;
          background: #F7F7B6;
          position: absolute;
          top: 0;
          left: 0;
          transform-origin: 0 0 -300px;
          transform: translate3d(0, 0, -300px);
          backface-visibility: hidden;
        }

     transform-origin:设置旋转元素的基点位置  传送门

      x-axis:定义视图被置于 X 轴的何处

      y-axis:定义视图被置于 Y 轴的何处

      z-axis:定义视图被置于 Z 轴的何处

    backface-visibility:隐藏被旋转的 div 元素的背面(影藏星星在星空下)

    动态星空(多颗)

        .stars {
          transform: perspective(500px);
          transform-style: preserve-3d;
          position: absolute;
          bottom: 0;
          perspective-origin: 50% 100%;
          left: 50%;
          animation: rotate 90s infinite linear;
        }

    perspective 定义 3D 元素距视图的距离(星星在星空中的距离)

    制作星空动画

        @keyframes rotate {
          0% {
            transform: perspective(400px) rotateZ(20deg) rotateX(-40deg) rotateY(0);
          }
          100% {
            transform: perspective(400px) rotateZ(20deg) rotateX(-40deg) rotateY(-360deg);
          }
        }

      perspective():为 星星转换元素定义透视视图

      rotateZ() :定义星星沿着 Z 轴的 3D 旋转 20deg

      rotateX(): 定义星星沿着 X 轴的 3D 旋转 -40deg

      rotateY(): 定义星星沿着 Y 轴的 3D 旋转

    DOM

        <script>
        
        $(document).ready(function () {
            var stars = 800;
            var $stars = $('.stars');
            var r = 800;
            for (var i = 0; i < stars; i++) {
                if (window.CP.shouldStopExecution(1)) {
                    break;
                }
                var $star = $('<div/>').addClass('star');
                $stars.append($star);
            }
            
            window.CP.exitedLoop(1);
            $('.star').each(function () {
                var cur = $(this);
                var s = 0.2 + Math.random() * 1;
                var curR = r + Math.random() * 300;
                cur.css({
                    transformOrigin: '0 0 ' + curR + 'px',
                    transform: ' translate3d(0,0,-' + curR + 'px) rotateY(' + Math.random() * 360 + 'deg) rotateX(' + Math.random() * -50 + 'deg) scale(' + s + ',' + s + ')'
                });
            });
        });
    
        </script>

    当 DOM(文档对象模型) 已经加载,并且页面(包括图像)已经完全呈现时,会发生 ready 事件

      星星遍布夜空

    addClass() :向被选元素添加一个或多个类名

    append() :用于在列表末尾添加新的对象

     

    transform-origin :设置旋转元素的基点位置

                    transformOrigin: '0 0 ' + curR + 'px',
                    transform: ' translate3d(0,0,-' + curR + 'px) rotateY(' + Math.random() * 360 + 'deg) rotateX(' + Math.random() * -50 + 'deg) scale(' + s + ',' + s + ')'

       transformOrigin:星空每次都绕着字体中间旋转

        transform:随机出现新的星星

    暂时不知道

      window.CP.shouldStopExecution(1)

      window.CP.exitedLoop(1)

    有什么用。。。

      O(∩_∩)O留着

     

    (如需转载学习,请标明出处)
  • 相关阅读:
    使用语句修改数据表结构
    C# 写日志到文件
    mysql 语句要求
    跨discuz站获取
    php 记录图片浏览次数次数
    js获取url传递参数值
    jquery.validate.js 验证表单时,在IE当中未验证就直接提交的原因
    mkfs
    mount
    dd
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/9416956.html
Copyright © 2011-2022 走看看