【问题标题】:Animating fill-opacity on SVG element using JavaScript使用 JavaScript 在 SVG 元素上设置填充不透明度动画
【发布时间】:2015-12-17 13:09:15
【问题描述】:

我有一个由多条路径组成的 SVG 对象。对于这些路径中的每一个,都将一个 JavaScript 函数附加到“onmouseout”事件。如下所示:

<path id="AUK" style="fill:#00A600;" onmouseover="m_over(this.id);" onmouseout="m_out(this.id);" d="M142.3397,326l-8.66,-15l8.66,-15h17.32l8.66,15l-8.66,15H142.3397z"/>

当用户将鼠标悬停在该元素上时,不透明度设置为 0.3(函数未显示)。当用户的鼠标离开此元素时,不透明度重置为 1.0。实现这一点的函数如下所示:

function m_out(hover_id) { 
document.getElementById(hover_id).setAttribute("fill-opacity", "1.0"); }

我想在 1 秒内将不透明度从 0.3 淡化(或动画化)到 1.0。目前,这种转变(几乎)立即发生。

理想情况下,我想使用类似于上面列出的代码来实现这一点。

我应该从哪里开始...?

【问题讨论】:

    标签: javascript animation svg


    【解决方案1】:

    您可以在样式表中添加 css 过渡

    #AUK{
        -webkit-transition: fill-opacity 1s;
        transition: fill-opacity 1s;
    }
    

    有了这个,你甚至可以用纯 css 制作它。

    <style>
     circle {
        -webkit-transition: fill-opacity 1s; /* Safari */
        transition: fill-opacity 1s;
    }
      circle:hover {fill-opacity:0.1}
    </style>
    <svg>
      <circle cx="50" cy="50" r="45" fill="blue" stroke="darkblue" stroke-width="8"/>
    </svg>

    如果您希望转换仅以一种方式工作(即仅在鼠标悬停时鼠标悬停),您可以使用类选择器并根据需要添加或删除类。

    function m_over(evt){
    evt.target.setAttribute("fill-opacity","0.2")
    evt.target.removeAttribute("class")
    }
    function m_out(evt){
    evt.target.setAttribute("fill-opacity","1")
    evt.target.setAttribute("class","fade")
    }
    <style>
     .fade {
        -webkit-transition: fill-opacity 1s; /* Safari */
        transition: fill-opacity 1s;
    }
    
    </style>
    <svg>
      <circle cx="50" cy="50" r="45" fill="blue" stroke="darkblue" stroke-width="8" onmouseover="m_over(evt)" onmouseout="m_out(evt)"/>
    </svg>

    【讨论】:

    • 非常感谢您回复硬件。我使用了您提供的代码并填充了圆的淡入和淡出。但我真正想做的是将过渡(即淡入淡出)限制为“mouseout”事件。这意味着:当用户将鼠标悬停在 SVG 元素上时,填充不透明度会立即调整。但是当用户离开元素时......不透明度会转换回原来的值。
    • 我用第二个代码示例扩展了答案,展示了如何选择性地使用转换。
    • 非常感谢硬件。对此进行了测试。很好的解决方案。很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-04-29
    • 2016-10-12
    • 2017-10-04
    • 2015-04-12
    • 2015-05-01
    • 1970-01-01
    • 2015-02-03
    • 2012-08-03
    相关资源
    最近更新 更多