<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<style>
html,body{padding: 0; margin: 0; width: 100%; height: 100%; background: #012;font-size: 0; line-height: 0}
</style>
</head>
<body>
<svg width="100%" height="100%" preserveAspectRatio="xMinYMin slice">
<defs>
<polygon id="star" points="0 -10 2 -2 10 0 2 2 0 10 -2 2 -10 0 -2 -2" fill="white" />
</defs>
<g id="star-group"></g> <g id="ligth-tower" transform="translate(300 200)">
<defs >
<linearGradient id="gradient_1" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="rgba(255,255,255,0.6)"/>
<stop offset="1" stop-color="rgba(255,255,255,0.9)"/>
</linearGradient>
<linearGradient id="gradient_2" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="rgba(255,255,255,0.2)"/>
<stop offset="1" stop-color="rgba(255,255,255,1)"/>
</linearGradient>
<clipPath id="clipPath-1">
<polygon points="0 -40 800 0 0 40" transform="translate(-800 -60)" /> </polygon>
</clipPath>
</defs>
<!-- 灯塔和灯柱 -->
<g>
<polygon points="-10 0 10 0 0 -60" fill="url(#gradient_1)" />
<circle r="3" cx="0" cy="-60" fill="white" />
<!-- 旋转的灯光 -->
<g>
<ellipse rx="300" ry="150" cx="0" cy="-60" fill="url(#gradient_2)" clip-path="url(#clipPath-1)" />
<animateTransform from="0 0 -60" to="360 0 -60" type="rotate" dur="10s" repeatCount="indefinite" attributeName ="transform" begin="0s" >
</animateTransform>
<!-- from="0,x,y" to="360,x,y" X,Y就是你的坐标 -->
</g>
</g>
</g>
<!-- 绘制月亮 -->
<g id="moon">
<defs>
<mask id="mask-moon">
<circle r="100" cx="-600" cy="-250" fill="white" />
<circle r="100" cx="-550" cy="-290" fill="black" />
</mask>
</defs>
<circle r="100" cx="-600" cy="-250" fill="yellow" mask="url(#mask-moon)" />
</g>
</svg>
<script>
var SVG_NS='http://www.w3.org/2000/svg';
var XLINK_NS='http://www.w3.org/1999/xlink';
var paper=document.querySelector('svg');
var starCount=500;
var width=document.body.clientWidth;
var height=document.body.clientHeight;
var star;
renderStar()
setSVGViewBox()
//绘制星星
function renderStar() {
var starRef=document.querySelector('#star');
var starGroup=document.querySelector('#star-group');
while (starCount--) {
star=use(starRef);
star.setAttribute('transform','translate('+random(-width/2,width/2)+','+random(-height/2,height/2)+')'+'scale('+random(0.1,0.8)+')');
star.setAttribute('opacity',random(0.1,0.7))
starGroup.appendChild(star)
}
}
//JS加载use方法
function use(origon){
var _use=document.createElementNS(SVG_NS,'use');
_use.setAttributeNS(XLINK_NS,'xlink:href','#'+origon.id)
return _use
}
//大小数之间的随机
function random(min,max){
return min+(max-min)*Math.random();
}
//设置svg的宽高
function setSVGViewBox(){
paper.setAttribute('viewBox',-width/2+' '+(-height/2)+' '+width+' '+height )
console.log(paper.getAttribute('viewBox'));
}
</script>
</body>
</html>

根据慕课网视频制作的,纯粹是当作一个记录,在这个DEMO中,涉及到了许多SVG的知识,基本适口的设置、绘图API、clip-path、mask蒙板的使用、animateTransform动画;

svg绘制蓝色星空,月亮,旋转灯塔的更多相关文章

  1. 18个超有趣的SVG绘制动画赏析

    SVG作为时下比较新颖的技术标准,已经建立了很多基于SVG的前端项目.由于SVG在绘制路径上非常灵活,我们将很多网页上的元素使用SVG来绘制而成,有各种人物.小图标.小动画等等.今天我们收集了18个非 ...

  2. 程序猿必备的10款超有趣的SVG绘制动画赏析

    SVG作为时下比较新颖的技术标准,已经建立了很多基于SVG的前端项目.由于SVG在绘制路径上非常灵活,我们将很多网页上的元素使用SVG来绘制而成,有各种人物.小图标.小动画等等.今天我们收集了10个非 ...

  3. 使用SVG绘制湖南地图

    项目中有需求使用SVG绘制湖南地图,现把自己制作过程写一下供大家参考. 1.首先准备一张湖南地图(仅有各市边界线即可).(图片最好是PNG的,除了地图其它什么也没有) 2.准备SVG编辑工具SVGDe ...

  4. SVG Drawing Animation - SVG 绘制动画

    一个小实验,探索 SVG 线图动画的使用情况,以前沿的展示形式呈现图形或网站元素的外观,模拟它们的加载.SVG 真的很强大,有许多创造性和可能性,使用 SVG 可以制作各种有趣的网站交互效果.今天这篇 ...

  5. html 5新特性 --用SVG绘制的微信logo

    一个简单的SVG绘制图片的小案例. 效果图: 代码如下: <style> * { ; ; } body { background-color: #d5d3d4; } .container ...

  6. SVG绘制圆形简单示例分享

    今天分享“svg绘制圆形”部分 1.简单圆形 效果图如下: 关键代码: <svg xmlns="http://www.w3.org/2000/svg" version=&qu ...

  7. svg绘制一个简单地饼图

    一个简单地svg绘制饼图的demo,代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...

  8. SVG绘制图形

    一.SVG介绍 1.SVG指可伸缩矢量图片 2.SVG用来定义用于网络的基于矢量的图形 3.SVG使用XML格式定义图形 4.SVG图像在放大或改变尺寸的情况下其图形质量不会有损失 5.SVG是万维网 ...

  9. 使用SVG绘制流程图

    本篇主要记录流程图的实现过程中的难点和核心技术点,先上效果图: 节点可以任意拖拽,曲线跟随变化 正在连接的线 1.节点实现 流程图是基于SVG绘制的,节点主要利用 g 和 foreignObject的 ...

随机推荐

  1. 在.NET2.0中解析Json和Xml

    在.NET解析json有很多方法,这里介绍最简单也用的最多的一种. 一.添加引用 解析Json,先下载开源控件 Newtonsoft.Json.dll 下载地址:http://files.cnblog ...

  2. sqlite3里类似top的用法

    sqlite3里类似top的用法 在sqlserver中使用top是很正常的,类似这样的语句: SELECT TOP 10 * FROM [index] ORDER BY id DESC; 但是很不幸 ...

  3. mysql快速上手1

    mysql简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅 ...

  4. POJ C程序设计进阶 编程题#1:分配病房

    编程题#1:分配病房 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 某个科 ...

  5. sqoop的codegen工具

    一.codegen工具的使用 sqoop codegen --connect jdbc:mysql://localhost:3306/test --username root --password 1 ...

  6. MongoDb 2.4 beta新特性——全文索引

    期待已久的特性,但目前仍然在beta阶段,所以官方建议不要在生产环境使用.也因此需要手动打开这个特性. 在命令行指定 mongod --setParameter textSearchEnabled=t ...

  7. TextView字符串波浪式跳动--第三方开源---JumpingBeans

    在github上有一个开源项目:JumpingBeans,其项目主页是:https://github.com/frakbot/JumpingBeans JumpingBeans将一个普通的Androi ...

  8. Android四大组件一----Activity

    最新面试需要复习一下Android基础. {所谓Activity} 通俗点:app上看到的窗口基本都是Activity Android 程序一般是由多个Activity组成,用户看到的能够交互的窗口通 ...

  9. ldd3-2 构造和运行模块:环境搭建2

    之前搭建了Ubuntu10.04驱动开发环境,但是那儿的内核版本是2.6.32.27,总感觉无从下手的感觉,因为书上的内核版本是2.6.10,作为初学者不知道差异在哪里,或许不应该纠结这个问题吧. 昨 ...

  10. lldb

    所有命令选择与input 值用  -- 区分 1 p/x 16 转16进制 https://sourceware.org/gdb/onlinedocs/gdb/Output-Formats.html ...