我写了一个应用程序,用于为文本元素添加动画效果(每个字母都在 span 元素内)。
我在 Internet Explorer 11 中看到了以下奇怪的效果(在 Chrome 中一切正常):
我的方法:据我所知,这似乎是正确的方法。(您在这里看到的是d3.js版本的过渡,这对我的理解没有影响)。首先为一些不支持常规
结果:
在Chrome中,这很好用,但在IE 11中,缩放过渡有效,但没有旋转。
任何帮助都将不胜感激!
我在 Internet Explorer 11 中看到了以下奇怪的效果(在 Chrome 中一切正常):
情景 1:
letters
.style("-webkit-transform", "rotate(-0deg) scale(.001)")
.style("-ms-transform", "rotate(-0deg) scale(.001)")
.style("-mozilla-transform", "rotate(-0deg) scale(.001)")
.style("transform", "rotate(-0deg) scale(.001)")
.transition()
.style("-webkit-transform", "rotate(-720deg) scale(1)");
.style("-ms-transform", "rotate(-720deg) scale(1)");
.style("-mozilla-transform", "rotate(-720deg) scale(1)")
.style("transform", "rotate(-720deg) scale(1)");
我的意图:显示几乎看不见的字母(scale.001),并将它们旋转两次,同时过渡到常规大小。我的方法:据我所知,这似乎是正确的方法。(您在这里看到的是d3.js版本的过渡,这对我的理解没有影响)。首先为一些不支持常规
transform
属性的浏览器添加前缀的transform
CSS样式。在这些浏览器实现所需的属性后,应通过常规属性(无前缀)调用它。因此,最后应调用常规属性以确保正常行为。结果:
在Chrome中,这很好用,但在IE 11中,缩放过渡有效,但没有旋转。
场景2:
(只使用transform
的前缀版本,删除常规裸露的transform
)
letters
.style("-webkit-transform", "rotate(-0deg) scale(.001)")
.style("-ms-transform", "rotate(-0deg) scale(.001)")
.style("-mozilla-transform", "rotate(-0deg) scale(.001)")
.transition()
.style("-webkit-transform", "rotate(-720deg) scale(1)");
.style("-ms-transform", "rotate(-720deg) scale(1)");
.style("-mozilla-transform", "rotate(-720deg) scale(1)");
这不应该是正确的方法,因为IE 11已经实现了transform。然而,这会产生正确的结果(对于IE 11)。
场景3:
我刚刚在Internet Explorer 11中打开了网站: https://css-tricks.com/almanac/properties/t/transform/ 那里的“常规”CSS transform旋转按预期显示。那些例子嵌入在Codepen中。
我有以下问题:
为什么场景1在IE 11中不起作用?(也尝试过各种更改但没有效果,例如只旋转而不缩放等)?
场景2可以工作,但似乎不是正确的方法,因为我必须省略常规的transform属性。我不追求这条路是对的吗?
在场景3中,常规的transform功能良好,唯一的区别似乎是它被嵌入在Codepen中。这是什么原因-是否有助于我们找到一个解决方案来回答问题1(应在Web服务器上运行而不是在codepen上)?
p.s. 在stackoverflow中我找到了这个相关的问题( 在IE11中旋转和缩放不起作用),但它没有帮助。
更新5月30日
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v5.min.js"></script>
<style>
span {display: inline-block;}
</style>
</head>
<body>
<script>
var letters1 = d3.select("body")
.selectAll("span.notWorking")
.data("Hello stackoverflow!")
.enter()
.append("span")
.attr("class", "notWorking");
//this is desirable but doesn't work in IE11:
// transform rotate doesn>'t work, but e.g. transform scale does
letters1
.style("-ms-transform", "rotate(0deg)")
.style("transform", "rotate(0deg)")
//.style("transform", "scale(0.01)")
.text(function(d){return d;})
.transition()
.style("-ms-transform", "rotate(720deg)")
.style("transform", "rotate(720deg)");
//.style("transform", "scale(1)");
var letters2 = d3.select("body")
.selectAll("span.working")
.data("Hello stackoverflow!")
.enter()
.append("span")
.attr("class", "working");
//this is not desirable (since the regular transform can't be used) but works in IE11:
letters2
.style("-ms-transform", "rotate(0deg)")
.text(function(d){return d;})
.transition()
.style("-ms-transform", "rotate(720deg)");
</script>
</body>
</html>
任何帮助都将不胜感激!
<>
),它类似于 jsfiddle.net、CodePen 等工具。 - Heretic Monkey<span>A</span>
这样的跨度应用变换请参见此处。但是,使用一个div
,IE11和Chrome做了同样的事情。我和@MikeMcCaughan一样,需要看到一些可重现的代码。 - Mark