2

我尝试使用 SVG 制作下一个和上一个按钮

有正方形和三角形。当你看到正方形时,如果你点击下一步,它应该变成三角形。当你看到三角形时,如果你点击上一个,它应该变回方形。

如果我点击下一个然后上一个,它工作得很好。但是当我尝试再次单击下一步时。它不起作用。

这是我的 SVG 代码

<!DOCTYPE HTML>
<html>
<body>

<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
     width="300" height="300">
  <text id="previous" x="50" y="250" font-family="Verdana" font-size="30" fill="blue" >
    Prev
  </text>
  <text id="next" x="200" y="250" font-family="Verdana" font-size="30" fill="blue" >
    Next
  </text>
  <g>
  <path id="triangle" d="M450 0 L375 200 L525 200 Z" 
        stroke="#000000" stroke-width="3" 
        fill="white">
        <animateColor attributeName="fill" 
                    to="rgb(0,255,0)" begin="mouseover" dur="1s" 
                    additive="sum" fill="freeze"/>
        <animateColor attributeName="fill" 
                    to="rgb(255,255,255)" begin="mouseout" dur="1s" 
                    additive="sum" fill="freeze"/>  

  </path>
  <path id="square" d="M75 0 L225 0 L225 200 L75 200 Z" 
        stroke="#000000" stroke-width="3" 
        fill="white">
        <animateColor attributeName="fill" 
                    to="rgb(255,0,0)" begin="mouseover" dur="1s" 
                    additive="sum" fill="freeze"/>
        <animateColor attributeName="fill" 
                    to="rgb(255,255,255)" begin="mouseout" dur="1s" 
                    additive="sum" fill="freeze"/>

  </path>
  <animateTransform attributeName="transform" attributeType="XML"
                    type="translate" by="-300,0" begin="next.click" dur="1s"
                    keyTimes="0; 1" calcMode="spline" keySplines=".5 0 .5 1"
                    additive="sum" accumulate="sum" fill="freeze"/>
  <animateTransform attributeName="transform" attributeType="XML"
                    type="translate" by="300,0" begin="previous.click" dur="1s"
                    keyTimes="0; 1" calcMode="spline" keySplines=".5 0 .5 1"
                    additive="sum" accumulate="sum" fill="freeze"/>
</g>

</body>
</html>
4

1 回答 1

2

这为我修复了它。请注意,您应该避免使用 animateColor 并改用 animate,因为在 SVG 规范中不推荐使用 animateColor。

<!DOCTYPE HTML>
<html>
<body>

<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
     width="300" height="300">
  <text id="previous" x="50" y="250" font-family="Verdana" font-size="30" fill="blue" >
    Prev
  </text>
  <text id="next" x="200" y="250" font-family="Verdana" font-size="30" fill="blue" >
    Next
  </text>
  <g>
  <path id="triangle" d="M450 0 L375 200 L525 200 Z" 
        stroke="#000000" stroke-width="3" 
        fill="white">
        <animate attributeName="fill" 
                    to="rgb(0,255,0)" begin="mouseover" dur="1s" 
                    additive="sum" fill="freeze"/>
        <animate attributeName="fill" 
                    to="rgb(255,255,255)" begin="mouseout" dur="1s" 
                    additive="sum" fill="freeze"/>  

  </path>
  <path id="square" d="M75 0 L225 0 L225 200 L75 200 Z" 
        stroke="#000000" stroke-width="3" 
        fill="white">
        <animate attributeName="fill" 
                    to="rgb(255,0,0)" begin="mouseover" dur="1s" 
                    additive="sum" fill="freeze"/>
        <animate attributeName="fill" 
                    to="rgb(255,255,255)" begin="mouseout" dur="1s" 
                    additive="sum" fill="freeze"/>

  </path>

  <animateTransform attributeName="transform" attributeType="XML"
                    type="translate" from="0,0" by="-300,0" begin="next.click" dur="1s"
                    keyTimes="0; 1" calcMode="spline" keySplines=".5 0 .5 1"
                    fill="freeze"/>
  <animateTransform attributeName="transform" attributeType="XML"
                    type="translate" from="-300,0" by="300,0" begin="previous.click" dur="1s"
                    keyTimes="0; 1" calcMode="spline" keySplines=".5 0 .5 1"
                    fill="freeze"/>
</g>

</body>
</html>
于 2013-04-11T10:57:53.720 回答