我已经尝试了一些使用 webkit-transition 的变体,这些变体是从谷歌搜索中找到的,但我一直无法使用。我有一些音频控件出现在点击事件上,它们突然出现并且生涩,所以我想将它们淡入。目标浏览器是 iOS,所以我正在尝试 webkit 扩展。
这是我目前拥有的:
<div id = "controls">
<audio id = "audio" controls></audio>
</div>
#controls {
position:absolute;
top: 35px;
left:73px;
height: 20px;
width: 180px;
display:none;
}
#audio {
opacity:0.0;
}
audio.src = clip;
audio.addEventListener('pause', onPauseOrStop, false);
audio.addEventListener('ended', onPauseOrStop, false);
audio.play();
audioControls.style.display = 'block';
audio.style.setProperty("-webkit-transition", "opacity 0.4s");
audio.style.opacity = 0.7;
webkit-transition 的文档说它对属性的更改生效,所以我假设在最后一行更改 style.opacity 会启动它。
控件以 0.7 的不透明度显示,但我希望它淡入并且动画没有发生。
我也试过这个:
#audio {
opacity:0.0;
-webkit-transition-property: opacity;
-webkit-transition-duration: 1s;
-webkit-timing-function: ease-in;
}
也试过
audio.style.webkitTransition = "opacity 1.4s";
从这篇文章如何使用 javascript 设置 CSS3 过渡?
我什么都做不了,我正在 iOS、Safari 桌面和 Chrome 上进行测试。所有这些都没有相同的结果。
更新:
按照提供的答案,控件现在以流畅的方式出现,但将它们淡出不起作用(它们立即消失,我已经投入了很长时间以确保我能看到它发生)
if (audioControls.style.display && audioControls.style.display === 'block') {
// controls are currently displayed
audio.removeEventListener('pause', onPauseOrStop, false);
audio.removeEventListener('ended', onPauseOrStop, false);
audio.pause();
audioControls.style.display = 'none';
setTimeout(function () {
audioControls.style.webkitTransition = "opacity 4.0s";
audioControls.style.opacity = 0.0;
}, 0);
}
else {
// controls are not displayed, display them and play the audio
audio.src = clip;
audio.addEventListener('pause', onPauseOrStop, false);
audio.addEventListener('ended', onPauseOrStop, false);
audio.play();
audioControls.style.display = 'block';
setTimeout(function () {
audioControls.style.webkitTransition = "opacity 4.0s";
audioControls.style.opacity = 0.7;
}, 0);
}