五、综合案例(月亮、星空、探照灯、湖)

一、标签

<use> 引用图形

<clip> 裁切图形(使用重合部分)

<mask> 蒙板(显示亮的部分)

IMG_2339.PNG
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>星空</title>
    <style>
        html,body{
            margin: 0;
            padding: 0;
            width:100%;
            height:100%;
            background: #001122;
            line-height: 0;
            font-size: 0;
        }
    </style>
</head>
<body>
    <svg width="100%" height="100%" viewBox="-400 -300 800 600" preserveAspectRatio="xMidYMid slice">

        <defs>
            <!--定义一个星星-->
            <polygon id="star" points="0 -10 2 -2 10 0 2 2 0 10 -2 2 -10 0 -2 -2" fill="white"></polygon>
        </defs>

        <!--真实-->
        <g id="real">
            <!--星空-->
            <g id="star-group"></g>

            <!--灯塔-->
            <g id="light-tower" transform="translate(250,0)">
                <defs>
                    <!--定义一个线性渐变的灯塔颜色-->
                    <linearGradient id="tower" x1="0" y1="0" x2="1" y2="0">
                        <stop offset="0" stop-color="#999"></stop>
                        <stop offset="1" stop-color="#333"></stop>
                    </linearGradient>
                    <!--定义一个三角形光束剪切path-->
                    <clipPath id="light-clip">
                        <polygon points="0 0 -400 -15 -400 15" fill="rgba(255,0,0,0.5)">
                            <!--定义在剪切三角形上的动画:绕着(0,0)点在二维平面内转圈-->
                            <animateTransform
                                    attrbuteName="transform"
                                    attributeType="XML"
                                    type="rotate"
                                    from="0"
                                    to="360"
                                    dur="10s"
                                    repeatCount="indefinite">
                            </animateTransform>
                        </polygon>
                        <!--灯心-->
                        <circle cx="0" cy="0" r="2"></circle>
                    </clipPath>
                    <!--定义一个径向渐变的光束颜色-->
                    <radialGradient id="light" cx="0.5" cy="0.5" r="0.5">
                        <stop offset="0" stop-color="rgba(255,255,255,0.8)"></stop>
                        <stop offset="1" stop-color="rgba(255,255,255,0)"></stop>
                    </radialGradient>
                </defs>
                <!--灯塔: 填充渐变色-->
                <polygon points="0 0 5 50 -5 50" fill="url(#tower)"/>
                <!--椭圆光晕-->
                <ellipse cx="0" cy="0" rx="300" ry="100" fill="url(#light)"
                         clip-path="url(#light-clip)"></ellipse>
            </g>

            <!--月亮-->
            <g id="moon-group">
                <mask id="moon-mask">
                    <circle cx="-250" cy="-150" r="100" fill="white"></circle>
                    <circle cx="-200" cy="-200" r="100" fill="black"></circle>
                </mask>
                <circle cx="-250" cy="-150" r="100" fill="yellow" mask="url(#moon-mask)"></circle>
            </g>
        </g>

        <!--分隔线-->
        <line x1="-400" y1="50" x2="400" y2="50" stroke="rgba(255,255,255,0.5)"/>

        <!--投影-->
        <g id="reflact" transform="translate(0,50)" mask="url(#fading)">
            <defs>
                <!--定义一个线性渐变的投影的蒙板颜色-->
                <linearGradient id="fade" x1="0" y1="0" x2="0" y2="1">
                    <stop offset="0" stop-color="rgba(255,255,255,0.6)"></stop>
                    <stop offset="0.5" stop-color="rgba(255,255,255,0)"></stop>
                </linearGradient>
                <!--定义一个投影蒙板:填充上面的线性渐变颜色-->
                <mask id="fading">
                    <rect height="300" width="800" x="-400" y="0" fill="url(#fade)"/>
                </mask>
            </defs>
            <use xlink:href="#real" transform="scale(1,-1) translate(0,-50)"/>
        </g>
    </svg>
</body>
<script>
    var SVG_NS = 'http://www.w3.org/2000/svg';
    var XLINK_NS = 'http://www.w3.org/1999/xlink';

    var paper = document.querySelector('svg');

    renderStar();

    function use(origin) {
        var _use = document.createElementNS(SVG_NS, 'use');
        _use.setAttributeNS(XLINK_NS, 'xlink:href', '#'+origin.id);
        return _use;
    }

    function random(min, max) {
        return min + (max - min) * Math.random(); //Math.random()返回0~1的double值
    }

    function renderStar() {
        var starRef = document.getElementById('star');
        var starGroup = document.getElementById('star-group');
        var starCount = 500;

        var star;
        while(starCount--){
            star = use(starRef);
            star.setAttribute('opacity', random(0.1, 0.4));
            star.setAttribute('transform',
            'translate('+random(-400, 400)+', '+random(-300, 50)+') ' +
            'scale('+random(0.1, 0.6)+')');
            starGroup.appendChild(star);
        }
    }

</script>
</html>

总结:

IMG_2380.PNG
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容