【发布时间】:2020-05-04 19:53:29
【问题描述】:
我目前正在制作一些 div 的翻转动画。
但是,我发现它在我尝试过的每个浏览器中都运行不正确且不同。只有 Edge 以我想要的方式工作。
我想单击“翻转”文本进行翻转以显示.flipping-view-back div,并隐藏.flipping-view-front div。此外,即使在滚动时,背面 div 上带有position:fixed 的工具栏也应固定在页面顶部。
实际上,这仅适用于某些浏览器。
On Edge:这正是我想要的。 Video
在 Chrome 上:前面的 div 翻转,但后面看不到后面的 div。仅在旋转转换完全完成后才会弹出后置 div。奇怪的是,在翻转过程中的任何时候滚动也会触发后面的 div 弹出。此外,向下滚动会使固定的 div 看不见。 Video
在 iOS Safari 上:这会正确翻转,但向下滚动会使固定 div 移出视线。 Video
在所有这些视频中,我单击了翻转文本并等待动画完成。然后我向下滚动。
如何使翻转动画正确并在所有浏览器中保持固定 div 位于顶部?
var currView = 0;
const rotatingViewElem = document.querySelector(".main");
const VIEW_FEED = 0;
const VIEW_FLIPPING_SEND = 1;
var viewFeedElem = document.querySelector(".view-positioner.feed");
var viewCreateElem = document.querySelector(".view-positioner.create");
var viewSelectRecipientsElem = document.querySelector(".view-positioner.select-recipients");
var viewFlippingSendElem = document.querySelector(".view-positioner.flipping-send");
var viewsList = [viewFlippingSendElem];
function flipView(isGoForward) {
var flippingElem = viewsList[currView];
var globalRotate;
if (isGoForward) {
globalRotate = "rotateY(180deg)";//flip around
} else {
globalRotate = "rotateY(0deg)";
}
flippingElem.style.transform = globalRotate;
}
document.querySelector(".create-send-button").addEventListener("click", function (e) { flipView(true) })
body, html{
width:100%;
height:100%;
margin:0px;
overflow:hidden;
}
.main{
perspective: 2000px;
height:100%;
}
.flipping-view-wrapper{
transform: rotateY(0);
transform-style: preserve-3d;
transition: transform 5.5s;
}
body{
height: 100%;
}
.view{
transform-style: preserve-3d;
position: relative;
padding-top:1px;
overflow-y:auto;
height: calc(100% - 1px);
width:100%;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
.view-positioner{
position: absolute;
left:0px;
top:0px;
width:100%;
height:100%;
}
.flipping-view-front{
background-color: pink;
transform: rotateY(0deg);
}
.flipping-view-back{
background-color: green;
transform:rotateY(180deg);
}
.create-send-button{
cursor: pointer;
}
/* begin top toolbar */
.top-toolbar{
position:fixed;
top:0px;
left:0px;
width:100%;
height:55px;
background:#FFFB00;
}
<!DOCTYPE html>
<html>
<body class="lightblue">
<div class="main">
<div class="view-positioner flipping-send flipping-view-wrapper lightblue ">
<div class="view-positioner view create flipping-view-front">
<div class="create-inputs center">
<div class="create-send-button" style="font-size: 50px;">
flip to the backside this is long so you can see
</div>
</div>
</div>
<div class="view-positioner view select-recipients lightblue flipping-view-back">
<div class="top-toolbar">
fixed
</div>
<div style="width:10px">Long text a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a</div>
</div>
</div>
</div>
</body>
</html>
【问题讨论】:
标签: html css cross-browser css-transforms