为与CSS3动画完成相关的功能添加回退
Adding fallback for functionality related to CSS3 animation completion
我使用的是animate css库提供的CSS3动画。有些地方,比如加载屏幕,会淡出加载动画并等待此动画完成,以便执行其他操作。因此:
var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';
$('#loading')
.addClass('fadeOut')
.one(animationEnd, function() {
$(this).css('display', 'none');
})
所以,如果浏览器不支持与fadeOut类相关的CSS3动画,它会不会在动画端执行该功能?为了启动此功能,这里可能有什么后备措施。
如果浏览器不支持CSS动画,动画结束事件会被触发吗
通常,如果浏览器不支持CSS3动画,则animationEnd
事件也不会被触发,因此在动画完成时执行的回调函数将根本不会被调用。
执行回调函数的解决方案是什么
确保回调函数即使在不支持CSS3动画的浏览器上也能执行的一种方法是测试动画支持,(a)如果支持,则在动画完成后执行回调函数;(b)如果不支持,则立即执行回调函数。
在下面的片段中,我使用了MDN提供的代码来测试动画支持。在支持动画的浏览器中,下面的片段会产生抖动效果,并在结束时将背景色更改为红色,而在不支持动画的服务器中,它会立即将背景色改为红色。
这已经在IE9(不支持CSS3动画)、IE10、IE11、Edge、Mozilla和Chrome中进行了测试。在Opera中,代码在Fiddle或CodePen中单独测试时可以工作,但在此处的片段中动画化后颜色不会改变。我认为这一定与Stack Snippet有关,而不是代码本身。
/* Code from MDN */
var animation = false,
animationstring = 'animation',
keyframeprefix = '',
domPrefixes = 'Webkit Moz O ms Khtml'.split(' '),
pfx = '',
elm = document.createElement('div');
if (elm.style.animationName !== undefined) {
animation = true;
}
if (animation === false) {
for (var i = 0; i < domPrefixes.length; i++) {
if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) {
pfx = domPrefixes[i];
animationstring = pfx + 'Animation';
keyframeprefix = '-' + pfx.toLowerCase() + '-';
animation = true;
break;
}
}
}
/* End of Code from MDN */
if (animation) { // check if animation is supported
var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';
$('.animated-element').one(animationEnd, function() { // if supported attach animationEnd handler
callback();
})
} else { // if animation is not supported execute callback immediately
callback();
}
function callback() {
console.log('Hello World!');
$('.animated-element').css('background-color', 'red');
}
.animated-element {
display: inline-block;
width: 200px;
height: 200px;
border: 1px solid;
animation: shake 1s 2s linear forwards;
}
@keyframes shake {
0% {
transform: translateX(10px);
}
25% {
transform: translateX(-10px);
}
50% {
transform: translateX(10px);
}
75% {
transform: translateX(-10px);
}
100% {
transform: translateX(0px);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='animated-element'>Hello!</div>
是否有可用于执行这些测试的库
您可以使用像Modernizr这样的库来测试动画支持,然后根据它来决定进一步的操作过程。
相关文章:
- 将控制器的功能添加到角度中的特定视图
- 如何将工具提示功能添加到高级图表中的 X 轴标签
- 如何将左/右箭头(下一个/上一个)功能添加到我的 jQuery 图像和文本滑块
- 将缩放功能添加到 jquery 宝丽来图库
- 将本地搜索功能添加到传单 JS 库
- 尝试将促销代码功能添加到折扣号码
- 无法将热键功能添加到firefox插件中
- 为与CSS3动画完成相关的功能添加回退
- 如何将标准API功能添加到jQuery插件中
- Rest.next()?我的点击功能添加'.活动'两次
- 向OpenLayers 3中的功能添加事件处理程序
- 将自定义功能添加到chrome's控制台
- 当我将鼠标悬停在通过按钮功能添加的表行上时,如何更改列中的图像
- 为分页导航功能添加延迟
- 另外,使用Javascript功能添加多个文本框
- JS位置加载后的功能-添加延迟时间
- 希望将展开和折叠功能添加到作为父节点的动态生成的文件中
- 未捕获的类型错误:无法读取属性'作者'在尝试将编辑功能添加到注释框时,为undefined
- 如何将 jquery 自动完成 UI 功能添加到表中的每个单元格
- 将滑动功能添加到响应页面的现有侧边菜单中