При использовании D3 в IOS (протестировано в версиях 8.1, 10.3.1 и 11.4) любые преобразования, вызываемые после .transition()
в слушателе прокрутки, не применяются до тех пор, пока прокрутка не завершится.Например, если бы в функции прослушивания прокрутки было указано следующее, height
не будет установлен до завершения прокрутки:
d3.select('.my-rect')
.transition()
.attr('height', () => {
// assume `date` updated by scroll listener
return myTimeScale(date);
});
Если я удаляю .transition()
, тогда все работает как ожидалось.
Если я введу операторы console.log
, ясно, что myTimeScale(date)
выполняется при каждом событии прокрутки / касания, но визуально ничего не меняется до тех пор, пока прокрутка не закончится и пользователь не уберет палец с экрана.
Здесь необходимо отметить пару важных вещей:
- Это происходит даже при прослушивании событий
touchmove
и scroll
- Это не похоже напроблема, связанная с инерцией прокрутки, потому что ничто не обновляется даже с полностью управляемой прокруткой
Я могу обойти эту проблему, но любопытно, если кто-нибудь знает, что вызывает ее.