Lottie 在 iOS 上改变位置。适用于 Windows 和 Android
Lottie shifts position on iOS. Works fine on Windows & Android
所以我正在研究这个 Lottie/iframe 组合。
由于我刚刚学习javascript,请原谅我乱七八糟的代码。
为了启动 lottie 动画并启动 youtube iframe(自动播放且未静音),我使用了一个堆叠在 Lottie 顶部的按钮以适应动画的空白区域。
这在 Windows 和 Android 浏览器上运行良好。
如果在 Safari 中加载(MacOS 和 iOS),lottie 动画会改变位置并且不再与按钮对齐。当动画开始时,lottie 突然移动位置并再次对齐。如果我锁定设备 (iPhone X) 并再次解锁,则 lottie returns 到错误的位置。
此错误仅存在于 iOS Safari/Chrome。遗憾的是,我没有 Mac 可以直接在 Safari 中进行调试。也许有人有想法?
代码可能还有更多问题,但除了所描述的问题外,它似乎工作正常。
youtube iframe 在 codepen 上不可见,因为它们阻止了一些必要的内容。 iframe 的显示在我的网站上按预期工作。
https://codepen.io/peplebe/pen/dyvJQMo
<head>
<script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js"></script>
<script>
window.onload = function(){
var player = document.querySelector("lottie-player");
var play = document.querySelector(".start");
var stop = document.querySelector("#stop");
let ytiframe = document.getElementById('ytiframe');
play.onclick = function () {
player.play();
ytiframe.classList.toggle('fade');
};
};
</script>
<script src="https://www.youtube.com/iframe_api"></script>
</head>
<style>
@-webkit-keyframes glowings {
0% { background-color: #B20000; -webkit-box-shadow: 0 0 3px #B20000; }
50% { background-color: #FF0000; -webkit-box-shadow: 0 0 40px #FF0000; }
100% { background-color: #B20000; -webkit-box-shadow: 0 0 3px #B20000; }
}
@-moz-keyframes glowings {
0% { background-color: #B20000; -moz-box-shadow: 0 0 3px #B20000; }
50% { background-color: #FF0000; -moz-box-shadow: 0 0 40px #FF0000; }
100% { background-color: #B20000; -moz-box-shadow: 0 0 3px #B20000; }
}
@-o-keyframes glowings {
0% { background-color: #B20000; box-shadow: 0 0 3px #B20000; }
50% { background-color: #FF0000; box-shadow: 0 0 40px #FF0000; }
100% { background-color: #B20000; box-shadow: 0 0 3px #B20000; }
}
@keyframes glowings {
0% { background-color: #ffd300; box-shadow: 0 0 3px #ffde00; }
50% { background-color: #ffd300; box-shadow: 0 0 40px #ffde00; }
100% { background-color: #ffd300; box-shadow: 0 0 3px #ffde00; }
}
.btn-glow {
-webkit-animation: glowings 1500ms infinite;
-moz-animation: glowings 1500ms infinite;
-o-animation: glowings 1500ms infinite;
animation: glowings 1500ms infinite;
color: rgb(163,5,0);
position: absolute;
bottom: 233px;
left: 157px;
width: 130px;
height: 60px;
transform: rotate(-0.5deg);
background-color: rgba(208,207,207,0.72);
border: 0px;
font-weight: bold;
z-index: 199!important;
}
.btn-glow:hover {
-webkit-animation: glowings 0ms infinite;
-moz-animation: glowings 0ms infinite;
-o-animation: glowings 0ms infinite;
animation: glowings 0ms infinite;
}
#ytiframe {
-webkit-transition: opacity 3s ease-in-out;
-moz-transition: opacity 3s ease-in-out;
-ms-transition: opacity 3s ease-in-out;
-o-transition: opacity 3s ease-in-out;
opacity: 0;
width: 250px;
float: none;
margin: 0 auto;}
#ytiframe.fade {
opacity:.5;
}
.jukeboxcode{
position: relative;
bottom: -10px;
}
</style>
<body data-rsssl=1>
<div class="jukeboxcode" style="height: 800px; width: 400px; background-color: rgba(25,254,1,0.14); ">
<button id="fadebutton" class="start play btn-glow">INSERT COIN</button>
<div id="ytiframe" class="video" >
<iframe width="560" height="315" src="https://www.youtube.com/embed/MV_3Dpw-BRY?enablejsapi=1&playsinline=1" frameborder="0" playsinline="1" allow="autoplay" ></iframe>
</div>
<script>
(function() {
var player;
window.onYouTubeIframeAPIReady = function() {
new YT.Player(document.querySelector('.video iframe'), {
events: {
onReady: function(e) {
player = e.target
}
}
})
}
document.querySelector('.jukeboxcode .play').addEventListener('click', function(e) {
e.preventDefault()
player.playVideo()
})
})()
</script>
<lottie-player src="https://assets7.lottiefiles.com/packages/lf20_yc3xb5l6.json" background="transparent" speed="1" style="z-index: 188; width: 400px; height: 550px;" ></lottie-player>
</div>
</body>
此致。
PS:我还想让 youtube 播放器停止播放,并在单击按钮时重置 lottie 动画。如果有人知道如何这样做,我们将不胜感激。
最终解决方案是将 lottie 渲染为 canvas 而不是 svg。这修复了错误。
仍然不确定是什么原因造成的。
<lottie-player src="..." background="transparent" speed="1" renderer: 'canvas', style="width: 300px; height: 300px;" loop controls autoplay></lottie-player>
所以我正在研究这个 Lottie/iframe 组合。 由于我刚刚学习javascript,请原谅我乱七八糟的代码。
为了启动 lottie 动画并启动 youtube iframe(自动播放且未静音),我使用了一个堆叠在 Lottie 顶部的按钮以适应动画的空白区域。
这在 Windows 和 Android 浏览器上运行良好。 如果在 Safari 中加载(MacOS 和 iOS),lottie 动画会改变位置并且不再与按钮对齐。当动画开始时,lottie 突然移动位置并再次对齐。如果我锁定设备 (iPhone X) 并再次解锁,则 lottie returns 到错误的位置。
此错误仅存在于 iOS Safari/Chrome。遗憾的是,我没有 Mac 可以直接在 Safari 中进行调试。也许有人有想法?
代码可能还有更多问题,但除了所描述的问题外,它似乎工作正常。 youtube iframe 在 codepen 上不可见,因为它们阻止了一些必要的内容。 iframe 的显示在我的网站上按预期工作。
https://codepen.io/peplebe/pen/dyvJQMo
<head>
<script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js"></script>
<script>
window.onload = function(){
var player = document.querySelector("lottie-player");
var play = document.querySelector(".start");
var stop = document.querySelector("#stop");
let ytiframe = document.getElementById('ytiframe');
play.onclick = function () {
player.play();
ytiframe.classList.toggle('fade');
};
};
</script>
<script src="https://www.youtube.com/iframe_api"></script>
</head>
<style>
@-webkit-keyframes glowings {
0% { background-color: #B20000; -webkit-box-shadow: 0 0 3px #B20000; }
50% { background-color: #FF0000; -webkit-box-shadow: 0 0 40px #FF0000; }
100% { background-color: #B20000; -webkit-box-shadow: 0 0 3px #B20000; }
}
@-moz-keyframes glowings {
0% { background-color: #B20000; -moz-box-shadow: 0 0 3px #B20000; }
50% { background-color: #FF0000; -moz-box-shadow: 0 0 40px #FF0000; }
100% { background-color: #B20000; -moz-box-shadow: 0 0 3px #B20000; }
}
@-o-keyframes glowings {
0% { background-color: #B20000; box-shadow: 0 0 3px #B20000; }
50% { background-color: #FF0000; box-shadow: 0 0 40px #FF0000; }
100% { background-color: #B20000; box-shadow: 0 0 3px #B20000; }
}
@keyframes glowings {
0% { background-color: #ffd300; box-shadow: 0 0 3px #ffde00; }
50% { background-color: #ffd300; box-shadow: 0 0 40px #ffde00; }
100% { background-color: #ffd300; box-shadow: 0 0 3px #ffde00; }
}
.btn-glow {
-webkit-animation: glowings 1500ms infinite;
-moz-animation: glowings 1500ms infinite;
-o-animation: glowings 1500ms infinite;
animation: glowings 1500ms infinite;
color: rgb(163,5,0);
position: absolute;
bottom: 233px;
left: 157px;
width: 130px;
height: 60px;
transform: rotate(-0.5deg);
background-color: rgba(208,207,207,0.72);
border: 0px;
font-weight: bold;
z-index: 199!important;
}
.btn-glow:hover {
-webkit-animation: glowings 0ms infinite;
-moz-animation: glowings 0ms infinite;
-o-animation: glowings 0ms infinite;
animation: glowings 0ms infinite;
}
#ytiframe {
-webkit-transition: opacity 3s ease-in-out;
-moz-transition: opacity 3s ease-in-out;
-ms-transition: opacity 3s ease-in-out;
-o-transition: opacity 3s ease-in-out;
opacity: 0;
width: 250px;
float: none;
margin: 0 auto;}
#ytiframe.fade {
opacity:.5;
}
.jukeboxcode{
position: relative;
bottom: -10px;
}
</style>
<body data-rsssl=1>
<div class="jukeboxcode" style="height: 800px; width: 400px; background-color: rgba(25,254,1,0.14); ">
<button id="fadebutton" class="start play btn-glow">INSERT COIN</button>
<div id="ytiframe" class="video" >
<iframe width="560" height="315" src="https://www.youtube.com/embed/MV_3Dpw-BRY?enablejsapi=1&playsinline=1" frameborder="0" playsinline="1" allow="autoplay" ></iframe>
</div>
<script>
(function() {
var player;
window.onYouTubeIframeAPIReady = function() {
new YT.Player(document.querySelector('.video iframe'), {
events: {
onReady: function(e) {
player = e.target
}
}
})
}
document.querySelector('.jukeboxcode .play').addEventListener('click', function(e) {
e.preventDefault()
player.playVideo()
})
})()
</script>
<lottie-player src="https://assets7.lottiefiles.com/packages/lf20_yc3xb5l6.json" background="transparent" speed="1" style="z-index: 188; width: 400px; height: 550px;" ></lottie-player>
</div>
</body>
此致。
PS:我还想让 youtube 播放器停止播放,并在单击按钮时重置 lottie 动画。如果有人知道如何这样做,我们将不胜感激。
最终解决方案是将 lottie 渲染为 canvas 而不是 svg。这修复了错误。 仍然不确定是什么原因造成的。
<lottie-player src="..." background="transparent" speed="1" renderer: 'canvas', style="width: 300px; height: 300px;" loop controls autoplay></lottie-player>