• Html5 Svg Chapter 3


    《Pro HTML5  Programming》

    Chapter 3 code example;在官网下载里没有找到第三章SVG的code,所以自己写了一遍,就当练习,在此处记录一下代码:

      1 <!DOCTYPE html>
      2 <html>
      3 <title>Happy Trails in SVG</title>
      4 <style>
      5     svg {
      6         border: 1px solid black;
      7     }
      8 
      9     g[id=Tree]:hover {
     10         opacity: 0.5;
     11         cursor: crosshair;
     12     }
     13 </style>
     14 
     15 <body>
     16     <div>
     17         <button id="AddTreeButton">Add Tree</button>
     18     </div>
     19     <svg width="400" height="600" xml:space="preserve">
     20         <defs>
     21             <pattern id="GravelPattern" patternUnits="userSpaceOnUse" x="0" y="0" width="100" height="67" viewBox="0 0 100 67">
     22                 <image x="0" y="0" width=100 height=67 xlink:href="gravel.jpg"></image>
     23             </pattern>
     24             <linearGradient xmlns="http://www.w3.org/2000/svg" y2="0" x2="1" y1="1" x1="1" id="CanopyShadow">
     25                 <stop offset="0" stop-color="#000" stop-opacity=".5"></stop>
     26                 <stop offset="0.2" stop-color="#000" stop-opacity="0"></stop>
     27             </linearGradient>
     28             <linearGradient xmlns="http://www.w3.org/2000/svg" y2="0" x2="1" y1="1" x1="1" id="TrunkGradient">
     29                 <stop offset="0%" stop-color="#663300"></stop>
     30                 <stop offset="40%" stop-color="#996600"></stop>
     31                 <stop offset="100%" stop-color="#552200"></stop>
     32             </linearGradient>
     33             <rect x="-5" y="-50" width=10 height=50 id="Trunk"></rect>
     34             <path id="Canopy" d="M-25,-50
     35             L-10,-80
     36             L-20,-80
     37             L-5,-110
     38             L-15,-110
     39             L0,-140
     40             L15,-110
     41             L5,-110
     42             L20,-80
     43             L10,-80
     44             L25,-50
     45             Z"></path>
     46 
     47             <g id="Tree">
     48                 <use xlink:href="#Trunk" fill="url(#TrunkGradient)" stroke="none"></use>
     49                 <use xlink:href="#Trunk" fill="url(#CanopyShadow)" stroke="none"></use>
     50                 <use xlink:href="#Canopy" fill="none" stroke="#663300" stroke-linejoin="round" stroke-width="4px"></use>
     51                 <use xlink:href="#Canopy" fill="#339900" stroke="none"></use>
     52             </g>
     53             <g id="TreeShadow">
     54                 <use xlink:href="#Trunk" fill="#000"></use>
     55                 <use xlink:href="#Canopy" fill="#000" stroke="none"></use>
     56             </g>
     57         </defs>
     58         <g transform="translate(-10,350)" stroke-width="20" stroke="url(#GravelPattern)" stroke-linejoin="round">
     59             <path d="M0,0 Q170,-50 260,-190 Q310,-250 410,-250" fill="none"></path>
     60         </g>
     61 
     62         <text x=200 y=60 font-family="impact" font-size="60px" fill="#996600" text-anchor="middle">
     63             Happy Trails!
     64         </text>
     65         <text y=90 x=200 font-family="impact" font-size="20px" fill="#996600" text-anchor="middle" id="TreeCounter">
     66         </text>
     67         <text y=420 x=20 font-family="impact" font-size="20px" fill="#996600" text-anchor="left">
     68             <tspan>You can remove a</tspan>
     69             <tspan y=440 x=20>tree by clicking on it.</tspan>
     70         </text>
     71 
     72         <use xlink:href="#TreeShadow" transform="translate(130,250) scale(1,0.6) skewX(-18)" opacity="0.4"></use>
     73         <use xlink:href="#Tree" transform="translate(130,250)"></use>
     74         <use xlink:href="#TreeShadow" transform="translate(260,500) scale(2,1.2) skewX(-18)" opacity="0.4"></use>
     75         <use xlink:href="#Tree" transform="translate(260,500) scale(2)"></use>
     76     </svg>
     77     <script>
     78         document.getElementById("AddTreeButton").onclick = function () {
     79             var x = Math.floor(Math.random() * 400);
     80             var y = Math.floor(Math.random() * 600);
     81             var scale = Math.random() + .5;
     82             var translate = "translate(" + x + "," + y + ")";
     83 
     84             var tree = document.createElementNS("http://www.w3.org/2000/svg", "use");
     85             tree.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", "#Tree");
     86             tree.setAttribute("transform", translate + "scale(" + scale + ")");
     87             document.querySelector("svg").appendChild(tree);
     88             updateTrees();
     89         };
     90         function updateTrees() {
     91             var list = document.querySelectorAll("use");
     92             var treeCount = 0;
     93             for (var i = 0; i < list.length; i++) {
     94                 if (list[i].getAttribute("xlink:href") == "#Tree") {
     95                     treeCount++;
     96                     list[i].onclick = removeTree;
     97                 }
     98             }
     99             var counter = document.getElementById("TreeCounter");
    100             counter.textContent = treeCount + " tree in the forest";
    101         }
    102         function removeTree(e) {
    103             var elt = e.target;
    104             if (elt.correspondingUseElement) {
    105                 elt = elt.correspondingUseElement;
    106             }
    107             elt.parentNode.removeChild(elt);
    108             updateTrees();
    109         }
    110     </script>
    111 </body>
    112 </html>
    View Code

    关于渐变填充参考如下:

    LinerGradient references: https://segmentfault.com/a/1190000009278935

  • 相关阅读:
    fopen C++
    Jungle Roads(最小生成树+并查集)
    Magic Number(dp)
    error: macro names must be identifiers
    <errors>'MessageBoxA' : function does not take 1 parameter
    归并排序模板
    MFC程序出现“Debug Assertion Failed! File:afx.inl Line:177”错误
    构造函数初始化列表
    (Codeforces Round #136 (Div. 2))A. Little Elephant and Function(递归分析,简单)
    Argus(ZOJ Problem Set 2212)(优先队列)
  • 原文地址:https://www.cnblogs.com/purple1/p/8243735.html
Copyright © 2020-2023  润新知