Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript svg rect元素上的classList没有像我预期的那样工作_Javascript_Svg - Fatal编程技术网

Javascript svg rect元素上的classList没有像我预期的那样工作

Javascript svg rect元素上的classList没有像我预期的那样工作,javascript,svg,Javascript,Svg,我搞砸了SVG,我不明白为什么不能在rect元素上切换类。仅在铬合金中测试,无法正常工作。 以下是: HTML <svg> <rect x="10" y="10" width="48" height="6"></rect> </svg> JS body { margin: 0; } svg { cursor: pointer; } .rotate { transform: rotate(45deg); } var

我搞砸了SVG,我不明白为什么不能在rect元素上切换类。仅在铬合金中测试,无法正常工作。 以下是:

HTML

<svg>
    <rect x="10" y="10" width="48" height="6"></rect>
</svg>
JS

body {
    margin: 0;
}
svg {
    cursor: pointer;
}
.rotate {
    transform: rotate(45deg);
}
var svg = document.querySelector('svg');
svg.onclick = function () {
    this.firstElementChild.classList.toggle('rotate');
};

因此,您需要将
rotate
的base语句添加到元素中,否则当您删除类时,它仍然具有rotate属性,这是因为svgs中的transform在Chrome中的工作方式

正如@RobertLongson所注意到的,这只是chrome的一个变通方法,因为它在其他浏览器中工作良好

var svg=document.querySelector('svg');
svg.onclick=函数(){
this.firstElementChild.classList.toggle('rotate');
};
正文{
保证金:0;
}
svg{
光标:指针;
}
svg矩形{
变换:旋转(0度);
}
.轮换{
变换:旋转(45度);
}


你的JSFIDLE在firefox 38.0.5oops上运行良好,我忘了说我只在Chrome上测试过它。在我的Chrome(43.0.2357.130 m)上也可以运行良好。如果你将它添加到css中:
svg rect{transform:rotate(0deg)}
,它能工作吗?问题不是第一次旋转,而是切换。它不会回到初始状态,对吗?你是说这是CSS转换规范所必需的,还是说你将此答案作为Chrome bug的解决方法?我认为这是必要的,因为旋转在SVG中与Chrome一起工作。我可能错了。所以是的。这是一个解决办法。你是对的。Thanks@RobertLongson编辑了答案,说这只是一个解决办法。谢谢