html5 svg






<!doctype html>
<title>Happy Trails in SVG</title>

<style>
  svg {
    border: 1px solid black;
  }
  g[id=Tree]:hover  {
    opacity: 0.9;
    cursor: crosshair;
  }
</style>

<div>
  <button id="AddTreeButton">Add Tree</button>
</div>

<svg width="400" height="600">

  <defs>
    <pattern id="GravelPattern" patternUnits="userSpaceOnUse" x="0" y="0" width="100" height="67" viewBox="0 0 100 67">
      <image x=0 y=0 width=100 height=67 xlink:href="gravel.jpg" />
    </pattern>
    <linearGradient id="TrunkGradient">
        <stop offset="0%" stop-color="#663300" />
        <stop offset="40%" stop-color="#996600" />
        <stop offset="100%" stop-color="#552200" />
    </linearGradient>

    <rect x="-5" y="-50" width=10 height=50 id="Trunk" />
    <path d="M-25, -50
            L-10, -80
            L-20, -80
            L-5, -110
            L-15, -110
            L0, -140
            L15, -110
            L5, -110
            L20, -80
            L10, -80
            L25, -50
            Z"
        id="Canopy"
      />
    <linearGradient id="CanopyShadow" x=0 y=0 x2=0 y2=100%>
        <stop offset="0%" stop-color="#000" stop-opacity=".5" />
        <stop offset="20%" stop-color="#000" stop-opacity="0" />
    </linearGradient>
    <g id="Tree">
      <use xlink:href="#Trunk" fill="url(#TrunkGradient)" />
      <use xlink:href="#Trunk" fill="url(#CanopyShadow)" />
      <use xlink:href="#Canopy" fill="none" stroke="#663300"
         stroke-linejoin="round" stroke-width="4px" />
      <use xlink:href="#Canopy" fill="#339900" stroke="none" />
    </g>
  </defs>


  <g transform="translate(-10, 350)"
      stroke-width="20"
      stroke="url(#GravelPattern)"
      stroke-linejoin="round">
        <path d="M0,0 Q170,-50 260, -190 Q310, -250 410,-250"
          fill="none" />
  </g>

  <text y=60 x=200
    font-family="impact"
    font-size="60px"
    fill="#996600"
    text-anchor="middle" >
    Happy Trails!
  </text>
  <text y=90 x=200
    font-family="impact"
    font-size="20px"
    fill="#996600"
    text-anchor="middle" id="TreeCounter">
  </text>

  <text y=420 x=20
    font-family="impact"
    font-size="20px"
    fill="#996600"
    text-anchor="left">
    <tspan>You can remove a</tspan>
    <tspan y=440 x=20>tree by clicking on it.</tspan>
  </text>

  <use xlink:href="#Tree" transform="translate(130,250)" />
  <use xlink:href="#Tree" transform="translate(260, 500) scale(2)" />
</svg>

<script>
  function removeTree(e) {
    var elt = e.target;
    if (elt.correspondingUseElement) {
      elt = elt.correspondingUseElement;
    }
    elt.parentNode.removeChild(elt);
    updateTrees();
  }

  document.getElementById("AddTreeButton").onclick = function() {
    var x = Math.floor(Math.random() * 400);
    var y = Math.floor(Math.random() * 600);
    var scale = Math.random() + .5;
    var translate = "translate(" +x+ "," +y+ ") ";

    var tree = document.createElementNS("http://www.w3.org/2000/svg", "use");
    tree.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", "#Tree");
    tree.setAttribute("transform", translate + "scale(" + scale + ")");
    document.querySelector("svg").appendChild(tree);
    tree.onclick = removeTree;
    updateTrees();
  }

  function updateTrees() {
    var list = document.querySelectorAll("use");
    var treeCount = 0;
    for (var i=0; i<list.length; i++) {
      if(list[i].getAttribute("xlink:href")=="#Tree") {
        treeCount++;
        list[i].onclick = removeTree;
      }
    }
    var counter = document.getElementById("TreeCounter");
    counter.textContent = treeCount + " trees in the forest";
  }

  updateTrees();
</script>






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值