Air*_*Air 8 javascript css svg svg-animate microsoft-edge
同事们,我知道两种动画方式.这两个选项都适用于我可以访问的所有浏览器; 我没有只检查Safari.
第一个是使用该功能 elem.beginElement ();
var wrapper_svg_1 = document.getElementById("wrapper_svg_1"),
close = document.getElementById('close'),
open = document.getElementById("open");
let flag = true;
wrapper_svg_1.addEventListener('click', function() {
if (flag == true) {
close.beginElement();
flag = false;
} else {
open.beginElement();
flag = true;
}
});
Run Code Online (Sandbox Code Playgroud)
* {
margin: 0;
padding: 0;
}
html,
body {
width: 100vw;
height: 100vh;
background: #272727;
font-size: 20px;
}
#wrapper {
width: 100vw;
height: 100vh;
background: transparent;
}
Run Code Online (Sandbox Code Playgroud)
<div id="wrapper">
<svg id="wrapper_svg_1" viewBox="0 0 301 301" width="301" height="301">
<path fill="none" id="icon-active" stroke="white" stroke-width="5" d="M100 65, 160 5, 195 40, 135 100, 195 160, 160 195, 100 135, 40 195, 5 160, 65 100, 5 40, 40 5z">
<animate id="close" begin="indefinite" fill="freeze" attributeName="d" dur="0.2s"
to="M5 5, 195 5, 195 195, 145 195, 145 40, 125 40, 125 195, 75 195, 75 40, 55 40, 55 195, 5 195z"></animate>
<animate id="open" begin="indefinite" fill="freeze" attributeName="d" dur="0.2s"
to="M100 65, 160 5, 195 40, 135 100, 195 160, 160 195, 100 135, 40 195, 5 160, 65 100, 5 40, 40 5z"></animate>
</path>
</svg>
</div>
<div id="wrapper">
<svg id="menu-icon" viewBox="0 0 200 200" width="100%" height="100%" ng-click="iconActive = !iconActive">
</svg>
</div>
Run Code Online (Sandbox Code Playgroud)
选项二,您可以通过更改class
元素来实现
let wrapper = document.getElementById("wrapper"),
iconActive = document.getElementById("icon-active");
wrapper.addEventListener('click', function() {
iconActive.classList.toggle('icon-active');
});
Run Code Online (Sandbox Code Playgroud)
* {
margin: 0;
padding: 0;
}
html,
body {
width: 100vw;
height: 100vh;
background: #272727;
font-size: 20px;
}
#wrapper {
width: 100vw;
height: 100vh;
background: transparent;
}
Run Code Online (Sandbox Code Playgroud)
<div id="wrapper">
<svg id="menu-icon" viewBox="0 0 200 200" width="100%" height="100%" ng-click="iconActive = !iconActive">
<style>
#menu-icon {
background: grey;
}
#icon-active {
transition: all .3s;
}
.icon-active {
d: path("M5 5, 195 5, 195 195, 145 195, 145 40, 125 40, 125 195, 75 195, 75 40, 55 40, 55 195, 5 195z");
transition: all .3s;
}
</style>
<path fill="none" id="icon-active" stroke="white" stroke-width="5" d="M100 65, 160 5, 195 40, 135 100, 195 160, 160 195, 100 135, 40 195, 5 160, 65 100, 5 40, 40 5z">
</path>
</svg>
</div>
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,Edge不支持该功能 elem.beginElement ();
是否有Microsoft Edge和IE的模拟?
在第二个变体中,主要的是class
左边的元素被添加和删除,但是不起作用.我该如何解决这个问题?
主要是我们需要用Edge来解决问题; IE - 不一定,但是对于一般信息,您可以为此浏览器提供示例解决方案
仅使用 SVG1.1(仍然是大多数浏览器支持的唯一版本)和 CSS 无法完成这种变形。您需要 SMIL 或复杂的 javascript 库来实现它。
我不愿意将您链接到可以执行此操作的 js 库(部分原因是我不太了解这些库),但 SMIL 似乎确实是最好的方法。
既然你想调用SVGAnimateElement.beginElement
,我猜你是在 javascript 可以执行的地方显示你的 svg ,这意味着你可以为 IE 浏览器填充 SMIL 。
有了这样的填充,你的动画应该可以在任何支持 svg (IE9+) 的浏览器中运行。
在这里,我将使用FakeSmile polyfill*,但互联网上还有其他可用的。
var wrapper_svg_1 = document.getElementById("wrapper_svg_1"),
close = document.getElementById('close'),
open = document.getElementById("open");
let flag = true;
wrapper_svg_1.addEventListener('click', function() {
if (flag == true) {
close.beginElement();
flag = false;
} else {
open.beginElement();
flag = true;
}
});
Run Code Online (Sandbox Code Playgroud)
* {
margin: 0;
padding: 0;
}
html,
body {
width: 100vw;
height: 100vh;
background: #272727;
font-size: 20px;
}
#wrapper {
width: 100vw;
height: 100vh;
background: transparent;
}
Run Code Online (Sandbox Code Playgroud)
<!-- include polyfill for IE -->
<script src="https://cdn.jsdelivr.net/gh/Kaiido/FakeSmile@1e50d675df616a8e784e0e6e931b3f0d595367d4/smil.user.js"></script>
<div id="wrapper">
<svg id="wrapper_svg_1" viewBox="0 0 301 301" width="301" height="301">
<path fill="none" id="icon-active" stroke="white" stroke-width="5" d="M100 65, 160 5, 195 40, 135 100, 195 160, 160 195, 100 135, 40 195, 5 160, 65 100, 5 40, 40 5z">
<animate id="close" begin="indefinite" fill="freeze" attributeName="d" dur="0.2s" to="M5 5, 195 5, 195 195, 145 195, 145 40, 125 40, 125 195, 75 195, 75 40, 55 40, 55 195, 5 195z"></animate>
<animate id="open" begin="indefinite" fill="freeze" attributeName="d" dur="0.2s" to="M100 65, 160 5, 195 40, 135 100, 195 160, 160 195, 100 135, 40 195, 5 160, 65 100, 5 40, 40 5z"></animate>
</path>
</svg>
</div>
Run Code Online (Sandbox Code Playgroud)
*实际上这个演示使用了上述库的一个分支,它有一个长期存在的错误,无法检测到 MS Edge 不支持 SMIL...
归档时间: |
|
查看次数: |
278 次 |
最近记录: |