zoukankan      html  css  js  c++  java
  • 简单实现渐变动画背景

    以前实现动画背景是这样的。

    原理:使用js控制div,从而实现动画渐变效果。(可以兼容旧IE) 

    <!doctype html>
    <html>
    
        <head>
            <title>js</title>
            <meta charset="utf-8">
            <script type="text/javascript" src="http://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script>
    
            <script>
                $(function() {
                    var orgColors = [{
                        r: 76,
                        g: 76,
                        b: 76
                    }, {
                        r: 30,
                        g: 87,
                        b: 153
                    }, {
                        r: 180,
                        g: 227,
                        b: 145
                    }, {
                        r: 237,
                        g: 144,
                        b: 23
                    }]
                    var colorGrandientSteps = 10;
    
                    function getColor(color0, color1, curstep, defaultStep) {
                        return {
                            g: parseInt(color0.g + (color1.g - color0.g) / defaultStep * curstep, 10),
                            r: parseInt(color0.r + (color1.r - color0.r) / defaultStep * curstep, 10),
                            b: parseInt(color0.b + (color1.b - color0.b) / defaultStep * curstep, 10)
                        }
                    }
                    var renderColor = (function(colors, defaultStep) {
                        var curstep = 1;
                        var color1 = colors[0],
                            color2 = colors[1];
                        return function() {
                            var newColor = getColor(color1, color2, curstep, defaultStep);
                            var cssColor = 'rgb(' + newColor.r + ',' + newColor.g + ',' + newColor.b + ')';
                            $('div#fill').css({
                                "background-color": cssColor
                            });
                            curstep++;
                            if(curstep === defaultStep + 1) {
                                curstep = 1;
                                colors.push(color1);
                                colors.shift();
                                color1 = colors[0];
                                color2 = colors[1];
                            }
                        }
                    })(orgColors, colorGrandientSteps);
    
                    setInterval(function() {
                        renderColor();
                    }, 50);
    
                });
            </script>
            <style type="text/css">
                * {
                    margin: 0;
                    padding: 0;
                }
                
                #fill {
                    width: 100%;
                    height: 100px;
                }
            </style>
    
        </head>
    
        <body>
            <div id="fill"></div>
        </body>
    
    </html>

    现在可以这样实现动画背景。

    原理:利用svg+css animation属性,从而实现动画渐变效果。(简单,无需js)

    <!doctype html>
    <html>
    
        <head>
            <title>svg</title>
            <meta charset="utf-8">
            <style type="text/css">
                * {
                    margin: 0;
                    padding: 0;
                }
                
                @keyframes fill {
                    0% {
                        fill: rgb(76, 76, 76);
                        fill: -moz-linear-gradient(top, rgba(76, 76, 76, 1) 0%, rgba(71, 71, 71, 1) 2%, rgba(252, 252, 252, 1) 100%);
                        fill: -webkit-linear-gradient(top, rgba(76, 76, 76, 1) 0%, rgba(71, 71, 71, 1) 2%, rgba(252, 252, 252, 1) 100%);
                        fill: linear-gradient(to bottom, rgba(76, 76, 76, 1) 0%, rgba(71, 71, 71, 1) 2%, rgba(252, 252, 252, 1) 100%);
                        filter: progid: DXImageTransform.Microsoft.gradient( startColorstr='#4c4c4c', endColorstr='#fcfcfc', GradientType=0);
                    }
                    25% {
                        fill: rgb(30, 87, 153);
                        fill: -moz-linear-gradient(top, rgb(30, 87, 153) 0%, rgb(32, 124, 202) 27%, rgb(32, 124, 202) 27%, rgb(125, 185, 232) 100%);
                        fill: -webkit-linear-gradient(top, rgb(30, 87, 153) 0%, rgb(32, 124, 202) 27%, rgb(32, 124, 202) 27%, rgb(125, 185, 232) 100%);
                        fill: linear-gradient(to bottom, rgb(30, 87, 153) 0%, rgb(32, 124, 202) 27%, rgb(32, 124, 202) 27%, rgb(125, 185, 232) 100%);
                        filter: progid: DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8', GradientType=0);
                    }
                    50% {
                        fill: rgb(180, 227, 145);
                        fill: -moz-linear-gradient(top, rgb(180, 227, 145) 0%, rgb(97, 196, 25) 84%, rgb(180, 227, 145) 100%);
                        fill: -webkit-linear-gradient(top, rgb(180, 227, 145) 0%, rgb(97, 196, 25) 84%, rgb(180, 227, 145) 100%);
                        fill: linear-gradient(to bottom, rgb(180, 227, 145) 0%, rgb(97, 196, 25) 84%, rgb(180, 227, 145) 100%);
                        filter: progid: DXImageTransform.Microsoft.gradient( startColorstr='#b4e391', endColorstr='#b4e391', GradientType=0);
                    }
                    75% {
                        fill: rgb(237, 144, 23);
                        fill: -moz-linear-gradient(top, rgb(237, 144, 23) 0%, rgb(237, 144, 23) 0%, rgb(251, 255, 188) 70%);
                        fill: -webkit-linear-gradient(top, rgb(237, 144, 23) 0%, rgb(237, 144, 23) 0%, rgb(251, 255, 188) 70%);
                        fill: linear-gradient(to bottom, rgb(237, 144, 23) 0%, rgb(237, 144, 23) 0%, rgb(251, 255, 188) 70%);
                        filter: progid: DXImageTransform.Microsoft.gradient( startColorstr='#ed9017', endColorstr='#fbffbc', GradientType=0);
                    }
                    100% {
                        fill: rgb(76, 76, 76);
                        fill: -moz-linear-gradient(top, rgba(76, 76, 76, 1) 0%, rgba(71, 71, 71, 1) 2%, rgba(252, 252, 252, 1) 100%);
                        fill: -webkit-linear-gradient(top, rgba(76, 76, 76, 1) 0%, rgba(71, 71, 71, 1) 2%, rgba(252, 252, 252, 1) 100%);
                        fill: linear-gradient(to bottom, rgba(76, 76, 76, 1) 0%, rgba(71, 71, 71, 1) 2%, rgba(252, 252, 252, 1) 100%);
                        filter: progid: DXImageTransform.Microsoft.gradient( startColorstr='#4c4c4c', endColorstr='#fcfcfc', GradientType=0);
                    }
                }
                
                #fill {
                    animation-name: fill;
                    animation-duration: 3s;
                    animation-iteration-count: infinite;
                }
            </style>
        </head>
    
        <body>
            <svg width="100%" height="100%">
                <rect id="fill" width="100%" height="100" />
            </svg>
        </body>
    
    </html>
  • 相关阅读:
    C++ 容器元素的存储和获取
    【C++沉思录】代理类
    mysql 编码测试
    理解字符编码
    linux mount
    mysql delimiter
    mysql 求时间段平均值
    mysql Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    PostgreSQL体系架构与内存结构
    PostgreSQL中的The Oversized-Attribute Storage Technique(TOAST:超大属性存储技术)
  • 原文地址:https://www.cnblogs.com/Sroot/p/5897249.html
Copyright © 2011-2022 走看看