CSS Transition 跨浏览器
CSS Transition cross browser
我正在尝试创建一个 css 动画回调。我认为唯一的方法是使用 JavaScript。我将不得不标准化回调名称以使其跨浏览器支持。我遇到了 this answer,它具有以下代码(经过稍微编辑):
function transitionEndEventName () {
var undefined,
transitions = {
'transition':'transitionend',
'OTransition':'otransitionend', // oTransitionEnd in very old Opera
'MozTransition':'transitionend',
'WebkitTransition':'webkitTransitionEnd'
};
for (var i in transitions) {
if (transitions.hasOwnProperty(i) && document.documentElement.style[i] !== undefined) {
return transitions[i];
}
}
return false
}
var transitionEnd = transitionEndEventName();
if (transitionEnd) {
element.addEventListener(transitionEnd, theFunctionToInvoke);
}
我的问题是,这在现在(2016 年 1 月)仍然有效吗?此外,是否有必要添加一个 else
语句(如果 transitionEnd === false)然后添加一个计时器,或者它永远不会等于 false?
它不再有效。根据 this caniuse table,所有主流浏览器都支持不带前缀的转换。
但是,您仍然应该处理根本不支持转换的情况。我建议简化您的代码:
function onTransitionEnd(element,callback) {
if( 'transition' in document.documentElement.style) {
element.addEventListener('transitionend',callback);
}
else callback();
}
然后您可以在回调中记下您是否有事件对象:
function theFunctionToInvoke(evt) {
if( evt) {
// function was called on transition end
}
else {
// transitions not supported, function was called immediately
}
}
我正在尝试创建一个 css 动画回调。我认为唯一的方法是使用 JavaScript。我将不得不标准化回调名称以使其跨浏览器支持。我遇到了 this answer,它具有以下代码(经过稍微编辑):
function transitionEndEventName () {
var undefined,
transitions = {
'transition':'transitionend',
'OTransition':'otransitionend', // oTransitionEnd in very old Opera
'MozTransition':'transitionend',
'WebkitTransition':'webkitTransitionEnd'
};
for (var i in transitions) {
if (transitions.hasOwnProperty(i) && document.documentElement.style[i] !== undefined) {
return transitions[i];
}
}
return false
}
var transitionEnd = transitionEndEventName();
if (transitionEnd) {
element.addEventListener(transitionEnd, theFunctionToInvoke);
}
我的问题是,这在现在(2016 年 1 月)仍然有效吗?此外,是否有必要添加一个 else
语句(如果 transitionEnd === false)然后添加一个计时器,或者它永远不会等于 false?
它不再有效。根据 this caniuse table,所有主流浏览器都支持不带前缀的转换。
但是,您仍然应该处理根本不支持转换的情况。我建议简化您的代码:
function onTransitionEnd(element,callback) {
if( 'transition' in document.documentElement.style) {
element.addEventListener('transitionend',callback);
}
else callback();
}
然后您可以在回调中记下您是否有事件对象:
function theFunctionToInvoke(evt) {
if( evt) {
// function was called on transition end
}
else {
// transitions not supported, function was called immediately
}
}