Вот надежный метод пропуска перехода CSS элемента, код взят из библиотеки X-Tag Web-компонентов Mozilla :
var prefix = (function () {
var styles = window.getComputedStyle(document.documentElement, ''),
pre = (Array.prototype.slice
.call(styles)
.join('')
.match(/-(moz|webkit|ms)-/) || (styles.OLink === '' && ['', 'o'])
)[1];
return {
dom: pre == 'ms' ? pre.toUpperCase() : pre,
lowercase: pre,
css: '-' + pre + '-',
js: pre[0].toUpperCase() + pre.substr(1)
};
})();
var requestFrame = (function(){
var raf = window.requestAnimationFrame ||
window[prefix.lowercase + 'RequestAnimationFrame'] ||
function(fn){ return window.setTimeout(fn, 20); };
return function(fn){
return raf.call(window, fn);
};
})();
var skipTransition = function(element, fn, bind){
var prop = prefix.js + 'TransitionProperty';
element.style[prop] = element.style.transitionProperty = 'none';
var callback;
if (fn) callback = fn.call(bind);
requestFrame(function(){
requestFrame(function(){
element.style[prop] = element.style.transitionProperty = '';
if (callback) requestFrame(callback);
});
});
};
КАК ИСПОЛЬЗОВАТЬ ЭТО - этот фрагмент предполагает, что вы установили переход на ширину foo
элемента и хотите немедленно изменить его на 100px без перехода элемента.
var foo = document.querySelector('#foo')
skipTransition(foo, function(){
foo.style.width = '100px';
});
LIVEПРИМЕР
Щелкните каждый из цветных элементов div в примере - красный элемент div имеет свой стиль ширины, установленный в функции skipTransition, что предотвращает переход и устанавливает стиль немедленно.Синий div имеет ширину, установленную обычно без skipTransition, и эффект перехода CSS происходит как обычно: http://codepen.io/csuwldcat/pen/nFlse