gpt4 book ai didi

javascript - CSS 变换旋转在 Internet Explorer 11 中不起作用

转载 作者:行者123 更新时间:2023-11-29 10:59:13 27 4
gpt4 key购买 nike

我编写了一个应用程序,它为文本元素设置动画(每个字母都在一个 span 元素中)。

我在 Internet Explorer 11 中看到以下奇怪的效果(在 Chrome 中一切正常):

场景一:

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 CSS 样式首先为某些不支持常规 transform 属性的浏览器添加前缀。在这些浏览器实现所需的属性后,它可以而且应该由常规属性(不带前缀)调用。因此,应最后调用常规属性以确保正确的行为。

结果:
这在 Chrome 中运行良好,但在 IE 11 中,缩放过渡有效但没有旋转。

场景 2:

(仅使用 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 已经实现了转换。但是,这会产生正确的结果(对于 IE 11)。

场景 3:

我刚打开网站: https://css-tricks.com/almanac/properties/t/transform/在 Internet Explorer 11 中,“常规”CSS 变换旋转会根据需要显示。这些示例嵌入在 Codepen 中。

我有以下问题:

为什么方案 1 在 IE 11 中不起作用? (也尝试过各种改变都没有效果,比如只旋转不缩放等)?

方案 2 可行,但似乎不是可行的方法,因为我必须省略常规准系统转换属性。我不走这条路对吗?

在场景 3 中,常规转换工作正常,唯一的区别似乎是,它嵌入在 Codepen 中。这是什么原因 - 它是否帮助我们找到问题 1 的解决方案(应该在 Web 服务器上而不是在 codepen 中运行?

附注在 stackoverflow 中我发现了这个相关问题 ( Rotate and scale does not work in 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>
 

如有任何帮助,我们将不胜感激!

最佳答案

我无法让您的极简示例在任何浏览器中运行。 d3 在插入转换 string 时遇到问题.相反,如果我使用 .tween 并手动进行插值,它似乎在 IE11 中工作(我尝试过 chrome、IE11 和 Edge):

<!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.working")
.data("Hello stackoverflow!")
.enter()
.append("span")
.attr("class", "working");

letters1
.style("transform", "rotate(0deg)scale(0.01)")
.text(function(d){return d;})
.transition()
.duration(2000)
.tween("transform", function() {
var node = d3.select(this),
s = d3.interpolateNumber(0.01, 1),
r = d3.interpolateNumber(0, 720);
return function(t) {
node.style("transform", "rotate(" + r(t) + "deg)scale(" + s(t) + ")");
};
});

</script>
</body>
</html>

关于javascript - CSS 变换旋转在 Internet Explorer 11 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com