Javascript 3D轮播在Internet Explorer中无法正常工作

时间:2014-11-18 17:29:34

标签: javascript html css3 internet-explorer carousel

我正在为一个想要3D旋转木马的客户的网站工作。 我发现这在Chrome和FF中完美运行:http://codepen.io/dudleystorey/pen/kiajB

HTML:

<div id=carousel>
<figure id=spinner>
<img src=//demosthenes.info/assets/images/wanaka-tree.jpg alt="">
<img src=//demosthenes.info/assets/images/still-lake.jpg alt="">
<img src=//demosthenes.info/assets/images/pink-milford-sound.jpg alt="">
<img src=//demosthenes.info/assets/images/paradise.jpg alt="">
<img src=//demosthenes.info/assets/images/morekai.jpg alt="">
<img src=//demosthenes.info/assets/images/milky-blue-lagoon.jpg alt="">
<img src=//demosthenes.info/assets/images/lake-tekapo.jpg alt="">
<img src=//demosthenes.info/assets/images/milford-sound.jpg alt="">
</figure>
</div>
<span style=float:left class=ss-icon onclick="galleryspin('-')">&lt;</span>
<span style=float:right class=ss-icon onclick="galleryspin('')">&gt;</span>

CSS:

div#carousel { 
  perspective: 1200px; 
  background: #100000; 
  padding-top: 10%; 
  font-size:0; 
  margin-bottom: 3rem; 
  overflow: hidden; 
}
figure#spinner { 
  transform-style: preserve-3d; 
  height: 300px; 
  transform-origin: 50% 50% -500px; 
  transition: 1s; 
} 
figure#spinner img { 
  width: 40%; max-width: 425px; 
  position: absolute; left: 30%;
  transform-origin: 50% 50% -500px;
  outline:1px solid transparent; 
}
figure#spinner img:nth-child(1) { transform:rotateY(0deg); 
}
figure#spinner img:nth-child(2) { transform: rotateY(-45deg); }
figure#spinner img:nth-child(3) { transform: rotateY(-90deg); }
figure#spinner img:nth-child(4) { transform: rotateY(-135deg); }
figure#spinner img:nth-child(5){ transform: rotateY(-180deg); }
figure#spinner img:nth-child(6){ transform: rotateY(-225deg); }
figure#spinner img:nth-child(7){ transform: rotateY(-270deg); }
figure#spinner img:nth-child(8){ transform: rotateY(-315deg); }
div#carousel ~ span { 
  color: #fff; 
  margin: 5%; 
  display: inline-block; 
  text-decoration: none; 
  font-size: 2rem; 
  transition: 0.6s color; 
  position: relative; 
  margin-top: -6rem; 
  border-bottom: none; 
  line-height: 0; }
div#carousel ~ span:hover { color: #888; cursor: pointer; }

JS:

var angle = 0;
function galleryspin(sign) { 
spinner = document.querySelector("#spinner");
if (!sign) { angle = angle + 45; } else { angle = angle - 45; }
spinner.setAttribute("style","-webkit-transform: rotateY("+ angle +"deg); -moz-transform: rotateY("+ angle +"deg); transform: rotateY("+ angle +"deg);");
}

不幸的是,它在IE11中是一场灾难。 我在网上寻求帮助,但似乎一切都是由最新版本的IE管理,所以我有点困惑。 我对javascript和css没有太多经验,对我来说一切似乎都没问题。 有人可以提供帮助吗?

1 个答案:

答案 0 :(得分:2)

您的功能在IE中失败的最可能原因与应用于transform-style: preserve-3d;的{​​{1}}规则有关。

IE对CSS​​3 3D功能的支持有所改进,但根据caniuse IE10和11仍然不支持3D转换API的特定功能。当我从CSS中删除规则时,我可以看到当缺少该功能时整个3d布局都会失败。

可能有另一种嵌套和格式化3d对象的方法,它们可以在没有“preserve-3d”的情况下实现相同的视觉效果,但它可能比现在的实现复杂得多。

您可能会考虑的另一个选项是使用threejs和WebGL处理您的3D轮播,必要时CSS 3D属性在目标浏览器中不可用。