html - 翻转动画在其他浏览器中的行为非常不同
问题描述
我目前正在制作一些 div 的翻转动画。
但是,我发现它在我尝试过的每个浏览器中都运行不正确且不同。只有 Edge 以我想要的方式工作。
我想单击“翻转”文本来翻转以显示.flipping-view-back
div,并隐藏.flipping-view-front
div。此外,position:fixed
即使在滚动时,背面带有 div 的工具栏也应固定在页面顶部。
实际上,这仅适用于某些浏览器。
On Edge:这正是我想要的。视频
在 Chrome 上:前面的 div 翻转,但后面看不到后面的 div。仅在旋转转换完全完成后才会弹出后置 div。奇怪的是,在翻转过程中的任何时候滚动也会触发后面的 div 弹出。此外,向下滚动会使固定的 div 看不见。视频
在 iOS Safari 上:这会正确翻转,但向下滚动会使固定 div 移出视线。视频
在所有这些视频中,我点击了翻转文本并等待动画完成。然后我向下滚动。
如何使翻转动画正确并在所有浏览器中将固定 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>
解决方案
可能与浏览器本身有关,也许看看-webkit。有针对不同浏览器的 webkits,因此您可能需要为不同的浏览器使用多个 webkits
那篇文章可能会给你更多信息
推荐阅读
- c++ - 精灵的 SFML 向量和精灵碰撞错误
- c# - List.Add() 方法内部
- python - 如何使用 PeeWee 进行左外连接且没有 ForeignKey?
- visual-studio-code - 启用/禁用代码格式切换的键盘快捷键 (VSCode)
- r - 选择功能的 dplyr 错误?
- javascript - 如何使所有滑块在一条垂直线上?
- performance - 对于在动态游戏场上拥有大量 AI 的游戏来说,哪种导航方法最高效、最灵活?
- node.js - Express Flash 消息不适用于 Axios,但适用于 Postman。这是为什么?
- amazon-s3 - 在不下载完整文件的情况下使用 FFMPEG
- arrays - iOS如何找到浮点/整数值数组的值之间的最小差异