// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* Make all transitions and animations take 0ms. NOTE: this will completely
* disable webkitTransitionEnd events. If your code relies on them firing, it
* will break. animationend events should still work.
*/
export function disableAnimationsAndTransitions(): void {
const all = document.body.querySelectorAll<HTMLElement>('*');
const ZERO_MS_IMPORTANT = '0ms !important';
for (let i = 0; i < all.length; ++i) {
const style = all[i]!.style;
style.animationDelay = ZERO_MS_IMPORTANT;
style.animationDuration = ZERO_MS_IMPORTANT;
style.transitionDelay = ZERO_MS_IMPORTANT;
style.transitionDuration = ZERO_MS_IMPORTANT;
}
const realElementAnimate = Element.prototype.animate;
Element.prototype.animate = function(
keyframes: Keyframe[]|PropertyIndexedKeyframes|null,
options?: number|KeyframeAnimationOptions) {
if (typeof options === 'object') {
options.duration = 0;
} else {
options = 0;
}
return realElementAnimate.call(this, keyframes, options);
};
}