Недавно я создал анимацию на основе css преобразования (translate) и перехода в сочетании с битом javascript. Анимация основана на событии mousemove в javascript, где свойство transform изменяется при каждом перемещении мыши. Дело в том, что все работает отлично, но если вы щелкнете мышью или попытаетесь что-то «перетащить» мышью, анимация начнет привязываться к точке «перетаскивания», а затем снова перейдет в предполагаемое место.
Элемент, который перемещается со свойством transform: (соответствующие атрибуты)
transition: transform 50ms ease;
-moz-transition: transform 50ms ease;
Сценарий javascript для анимации:
const shadowElement = document.getElementById('loginPage-terminal-shadow');
var offsetX = document.body.clientWidth / 2,
offsetY = document.body.clientHeight / 2;
var width = shadowElement.clientWidth;
var height = shadowElement.clientHeight;
var xInterval = (width * 1 / 10) / 2;
var yInterval = height * 1 / 10;
window.addEventListener("resize", function() {
offsetX = document.body.clientWidth / 2;
offsetY = document.body.clientHeight / 2;
width = shadowElement.clientWidth;
height = shadowElement.clientHeight;
xInterval = (width * 1 / 10) / 2;
yInterval = height * 1 / 10;
});
var prefix = (function() {
var styles = window.getComputedStyle(document.documentElement, ''),
pre = (Array.prototype.slice
.call(styles)
.join('')
.match(/-(moz|webkit|ms)-/) || (styles.OLink === '' && ['', 'o'])
)[1],
dom = ('WebKit|Moz|MS|O').match(new RegExp('(' + pre + ')', 'i'))[1];
return {
dom: dom,
lowercase: pre,
css: '-' + pre + '-',
js: pre[0].toUpperCase() + pre.substr(1)
};
})();
document.body.addEventListener('mousemove', function() {
var diffX = offsetX - event.clientX;
var diffY = offsetY - event.clientY;
var perX = diffX / offsetX;
var perY = diffY / offsetY;
var sftX = xInterval * perX;
var sftY = yInterval * perY;
shadowElement.style[prefix.css + "transform"] = "translate(" + sftX + "px, " + sftY + "px)";
});
Как вы, возможно, уже видели, я уже пытался добавить префикс поставщика в свойство transform и transition).
Анимация должна полностью игнорировать событие щелчка или перетаскивания, учитывая, что это проблема.
Дополнения: Кажется, это проблема firefox, она отлично работает на chrome.
Вот видео проблемы: https://www.dropbox.com/s/hcjp6evuvk6zm5m/problem.mkv?dl=0