|
|
1
Jaromanda X
2 年前
方法1:
requestAnimationFrame
function anim(from, to, cb, duration=100) {
let startms;
const frame = ms => {
const x = (ms - startms) ;
if (x > duration) {
return cb(to);
}
cb(x / duration * (to - from) + from)
requestAnimationFrame(frame);
}
requestAnimationFrame(ms => {
startms = ms;
requestAnimationFrame(frame);
})
}
function rotate() {
var svg = document.getElementById("svgID");
if (svg.getAttribute("transform") === "rotate(45)") {
anim(45, 0, v=> svg.setAttribute("transform", `rotate(${v})`));
} else {
anim(0, 45, v=> svg.setAttribute("transform", `rotate(${v})`));
}
}
#button {
margin: 0;
padding: 0;
background: none;
outline: none;
box-shadow: none;
border: none;
}
<button id="button" onclick="rotate()">
<svg id="svgID"
width="100%"
height="100%"
viewBox="0 0 142.40739 142.40991"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<path
id="rect234"
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:0;stroke-dasharray:none;paint-order:stroke fill markers"
d="m 85.223081,28.929132 a 4.2333333,4.2333333 0 0 0 -4.233333,4.233333 v 62.801852 l -65.486442,-0.24339 a 4.107912,4.107912 0 0 0 -4.247803,3.96255 4.2333333,4.2333333 0 0 0 4.217313,4.249353 l 65.516932,0.24339 v 62.9295 a 4.107912,4.107912 0 0 0 3.978568,4.23333 4.2333333,4.2333333 0 0 0 4.233334,-4.23333 v -62.89901 l 60.21338,0.22376 a 4.107912,4.107912 0 0 0 4.2478,-3.96255 4.2333333,4.2333333 0 0 0 -4.21731,-4.248833 L 89.20165,95.994807 V 33.162465 a 4.107912,4.107912 0 0 0 -3.978569,-4.233333 z"
transform="translate(-11.255471,-28.929132)" />
</svg>
</button>
方法2:
animate
function anim(el, from, to, duration=100) {
const animation = [
{ transform: `rotate(${from}deg)` },
{ transform: `rotate(${to}deg)` }
];
const timing = {
fill: 'both',
duration,
iterations: 1
};
el.animate(animation, timing);
}
function rotate() {
var svg = document.getElementById("svgID");
if (svg.dataset.rotated === "1") {
svg.dataset.rotated = "0";
anim(svg, 45, 0);
} else {
svg.dataset.rotated = "1";
anim(svg, 0, 45);
}
}
#按钮{
边距:0;
填充:0;
背景:无;
大纲:无;
盒子阴影:无;
边界:无;
}
<button id=“button”onclick=“rotate()”>
<svg id=“svgID”
宽度=“100%”
高度=“100%”
viewBox=“0 142.40739 142.40991”
版本=“1.1”
xmlns=“http://www.w3.org/2000/svg"
xmlns:svg=“http://www.w3.org/2000/svg">
<defs
id=“defs6”/>
<路径
id=“rect234”
style=“display:内联;不透明度:1;fill:#000000;fill不透明度:2;笔划:#000000;笔划宽度:0;笔划linecap:圆形;笔划miterlimit:0;笔划dasharray:无;绘制顺序:笔划填充标记”
d=“m 85.223081,28.929132 a 4.233333,4.233333 0 0-4.233333,4.233333 v 62.801852 l-65.486442,-0.24339 a 4.107912 0 0-42.47803,3.96255 4.233333、4.233333 00 4.217313,4.249353 l 65.516932,0.24339 v 62.9295 a 4.107912,4.107912 0.3.978568,4.23333 4.23333,4.23333 0 0 4.233334,-4.233333 v-62.89901 l 60.21338,0.22376 a 4.107912,4.1 07912 0 0 4.2478,-3.96255 4.233333,4.233333 0 0-4.21731,-4.248833 l 89.20165,95.994807 v 33.162465 a 4.107912,4.107912 0-3.978569,-4.233333 z“
transform=“翻译(-11.255471,-28.929132)”/>
</svg>
</按钮>
|