喔唷网 - 网络从业者技术信息综合门户!

当前位置: 主页 > 教程技术 > 编程语言 > html/css

HTML5的SVG详细案例解析 8.5

时间 : 2025-04-26 10:05来源 : 喔唷网作者 : 喔唷教程点击 :
(挥舞魔法矢量笔)同学们,上节课我们用canvas玩像素涂鸦,现在要解锁浏览器的矢量魔法啦!准备好用数学公式在网页上画永不模糊的图形了吗? 8.5 SVG简介和实际使用 8.5.1 会变形的魔法贴纸 SVG就

(挥舞魔法矢量笔)同学们,上节课我们用canvas玩像素涂鸦,现在要解锁浏览器的矢量魔法啦!准备好用数学公式在网页上画永不模糊的图形了吗?

8.5 SVG简介和实际使用

8.5.1 会变形的魔法贴纸

SVG就像用XML代码织毛衣,浏览器会自动帮你熨平所有褶皱:

<!-- 直接在HTML里织毛衣 -->
<svg width="200" height="200" style="border:1px dashed #ccc">
  <circle cx="100" cy="100" r="80" fill="#FFB6C1" />
  <text x="50" y="120" font-family="Comic Sans MS" font-size="20">
    Hello SVG!
  </text>
</svg>

(右键另存为图片?这可是自带超清Retina屏的矢量图!)

8.5.2 SVG vs Canvas 擂台赛

两种绘图技术的区别就像油画和剪纸:

特性SVG(剪纸艺术)Canvas(油画创作)
图像类型矢量图形(数学公式)位图(像素点)
DOM节点每个图形都是DOM元素单一块画布
事件绑定可单独给图形加点击事件只能监听整个画布
适合场景图标/图表/logo游戏/图像处理
缩放表现无限放大不模糊放大变马赛克

8.5.3 常用图形魔法阵

基础形状够你画个简笔画全家福:

<svg width="300" height="300">
  <!-- 哆啦A梦的圆脸 -->
  <circle cx="150" cy="150" r="100" fill="#00a0e9" />
  
  <!-- 胡须(路径绘制) -->
  <path d="M80 150 Q150 130 220 150" stroke="black" fill="none"/>
  
  <!-- 口袋(矩形+圆角) -->
  <rect x="120" y="180" width="60" height="70" rx="10" fill="white"/>
  
  <!-- 铃铛(组合图形) -->
  <g transform="translate(150,200)">
    <circle r="15" fill="gold"/>
    <rect y="15" width="4" height="20" fill="brown"/>
  </g>
</svg>

8.5.4 实战:会跳舞的卡通角色

<svg id="dancer" width="400" height="400">
  <!-- 身体 -->
  <rect x="180" y="250" width="40" height="100" fill="#87CEEB" rx="10"/>
  
  <!-- 头部 -->
  <circle cx="200" cy="200" r="40" fill="#FFDAB9"/>
  
  <!-- 动态手臂 -->
  <path id="arm" d="M150 220 Q120 200 100 240" 
        stroke="#87CEEB" stroke-width="8" 
        fill="none" stroke-linecap="round">
    <animate attributeName="d" 
             dur="1s" 
             values="M150 220 Q120 200 100 240;
                     M150 220 Q120 260 100 220;
                     M150 220 Q120 200 100 240"
             repeatCount="indefinite"/>
  </path>
  
  <!-- 眨眼动画 -->
  <g transform="translate(170,190)">
    <circle r="8" fill="black"/>
    <animateTransform attributeName="transform" 
                      type="translate" 
                      values="170,190;170,195;170,190" 
                      dur="2s" 
                      repeatCount="indefinite"/>
  </g>
</svg>

8.5.5 SVG生存手册

  1. 命名空间陷阱:独立SVG文件需要<?xml version="1.0"?>声明
  2. 视图框魔法:viewBox="0 0 100 100"是保持比例的秘密配方
  3. 性能警告:超过1000个图形会让浏览器卡成PPT
  4. CSS操控术:用CSS给SVG换皮肤:
svg circle {
  fill: pink;
  transition: fill 0.3s;
}
svg circle:hover {
  fill: hotpink;
}

JavaScript互动:

document.querySelector('svg path').addEventListener('click', () => {
  alert('你戳中了SVG的穴位!');
});

8.5.6 高级召唤术:SVG精灵图

<!-- symbols魔法书 -->
<svg style="display:none">
  <symbol id="icon-home" viewBox="0 0 24 24">
    <path d="M12 2L2 12h3v8h6v-6h2v6h6v-8h3L12 2z"/>
  </symbol>
</svg>

<!-- 随时召唤 -->
<svg class="icon">
  <use xlink:href="#icon-home"></use>
</svg>

(同一个精灵图可以在页面无限复用,像哈利波特的守护神咒!)

(掏出矢量魔杖)下节课我们将融合SVG和CSS3,猜猜怎么用代码让这个跳舞小人穿上会飘动的仙女裙?

栏目列表

关联类容

热点推荐

栏目推荐

猜你喜欢