javascript - 像图像旋转一样旋转 SVG 元素

标签 javascript html css svg

我试图让圆圈静止不动并绕自身旋转,但它在页面中旋转。 我刚刚开始学习 SVG,但此时却陷入了困境。 我将不胜感激任何帮助。

https://jsfiddle.net/5rz82ct3/1/

document.querySelector('button').addEventListener('click', () => {
  document.querySelector('.kolo svg #pomidor').classList.add('pomidor');
})
#pomidor {
  transform-origin: 50% 50%;
  opacity: 1;
  transition: all 4s;
}

#pomidor.pomidor {
  opacity: 1;
  transform: rotate(-360deg);
}
<div class="kolo">
  <svg width="246px" height="133px" viewBox="0 0 246 133" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
          <g id="pomidor">
            <g id="left">
              <path d="M188.669237,2.85577743 L220.007541,78.7916793 C215.011273,80.9577555 209.503344,82.159 203.7202,82.159 C181.0712,82.159 162.6422,63.731 162.6422,41.08 C162.6422,23.7394433 173.442929,8.87328458 188.669237,2.85577743 Z" id="tomato-dark" fill="#ED2D24">
              </path>         
            </g>
            <g id="right">
              <path d="M203.7202,0.0003 C198.1552,0.0003 192.8472,1.1183 188.0022,3.1323 L219.4392,79.0273 C234.3122,72.8423 244.8002,58.1653 244.8002,41.0803 C244.8002,18.4283 226.3712,0.0003 203.7202,0.0003" id="tomato-light" fill="green">
              </path>           
            </g>
          </g>
    </svg>
</div>
<button> Rotate circle</button>

最佳答案

将transform-b​​ox CSS属性设置为fill-box,以便形状围绕自己的中心而不是viewBox旋转。

document.querySelector('button').addEventListener('click', () => {
  document.querySelector('.kolo svg #pomidor').classList.add('pomidor');
})
#pomidor {
  transform-origin: 50% 50%;
  transform-box: fill-box;
  opacity: 1;
  transition: all 4s;
}

#pomidor.pomidor {
  opacity: 1;
  transform: rotate(-360deg);
}
<div class="kolo">
  <svg width="246px" height="133px" viewBox="0 0 246 133" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
          <g id="pomidor">
            <g id="left">
              <path d="M188.669237,2.85577743 L220.007541,78.7916793 C215.011273,80.9577555 209.503344,82.159 203.7202,82.159 C181.0712,82.159 162.6422,63.731 162.6422,41.08 C162.6422,23.7394433 173.442929,8.87328458 188.669237,2.85577743 Z" id="tomato-dark" fill="#ED2D24">
              </path>         
            </g>
            <g id="right">
              <path d="M203.7202,0.0003 C198.1552,0.0003 192.8472,1.1183 188.0022,3.1323 L219.4392,79.0273 C234.3122,72.8423 244.8002,58.1653 244.8002,41.0803 C244.8002,18.4283 226.3712,0.0003 203.7202,0.0003" id="tomato-light" fill="green">
              </path>           
            </g>
          </g>
    </svg>
</div>
<button> Rotate circle</button>

关于javascript - 像图像旋转一样旋转 SVG 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58308244/

相关文章:

javascript - IE8 无法读取数据 URL 图片

javascript - 禁用双击以单击触摸屏 iOS 设备

html - 在 IE 6.0 和 IE 7.0 中卡住列标题

html - 如何防止 Chrome 占用 100% 的窗口高度?

javascript - 是否可以将参数/变量传递给 Onblur 函数?

javascript - 每 5 秒执行一些操作以及停止它的代码。 (JQuery)

javascript - 如何让图片扩展到整个背景?

javascript - 试图在 react 中的文本之间添加 br 标签

php - 外部 css 已加载但未应用于 html - php codeigniter ssl - 如何将 css mime type = text/html 更改为 text/css

html - 如何在屏幕底部进行div以及内联和重叠父div