Теперь, когда поддержка настраиваемых свойств css становится широко распространенной, я решил использовать их для упрощения создания анимаций на основе прокрутки. В Javascript я использую style.setProperty ('- customProperty', value) для настройки настраиваемых свойств определенных элементов при прокрутке пользователем.
Он прекрасно работает в Chrome, Firefox и Safari 10.
Но в Safari 9.1 (который поддерживает настраиваемые свойства) я могу установить свойство только один раз. После установки оно не обновится до нового значения.
У меня есть все это в CodePen: https://codepen.io/kirkhadden/pen/JJbXmE/
// Have we scrolled since the last frame?
if (position != wrapper[0].scrollpos) {
// Keeps updating accurately every frame:
window.log.text(position);
// Only happens on the first frame:
wrapper[0].style.setProperty('--scrollpos', position+'px', '');
wrapper[0].scrollpos = position;
} else { // No Change
return false;
}
Я не могу найти никакой информации или даже упоминания об этом поведении. Я тестировал другие, более простые способы использования style.setProperty () в Safari, и продолжаю обнаруживать, что после установки свойства Safari не обновляет это свойство, даже если я сначала попытаюсь удалить это свойство.
Это ошибка Safari 9.1? Есть ли обходной путь? Есть ли другой способ использовать javascript для установки переменных css?
Обновлять
Итак, вместо style.setProperty я мог бы вместо этого использовать метод jQuery .attr () для установки свойства. Это не идеально, поскольку при этом будут перезаписаны любые другие свойства стиля, но это работает.
Более серьезная проблема заключается в том, что все это решение основано на идее установки обычных анимаций css для всех моих анимированных элементов, но с установкой состояния воспроизведения на паузу, а затем с использованием javascript для управления задержкой анимации в соответствии с положением прокрутки . Это позволяет мне использовать наследование для анимации множества вещей с минимальными манипуляциями с DOM.
Еще раз, Safari 9.1 является препятствием, поскольку кажется, что в отличие от Chrome или Firefox, если состояние воспроизведения «приостановлено», Safari вообще не запускает анимацию и игнорирует задержку анимации.