#javascript #css #polymer #polymer-3.x
Вопрос:
У меня есть массив, называемый files
, который представляет список загрузок файлов, у каждого из которых есть индикатор выполнения. Когда добавляется новый, я вызываю unshift
массив:
this.unshift('files', newFile);
Индикаторы выполнения отображаются в пользовательском интерфейсе с помощью dom-повтора:
<template is="dom-repeat" items="[[files]]" as="file">
<upload-file file="[[file]]"></upload-file>
</template>
Индикаторы выполнения имеют переход CSS для сглаживания обновлений значений выполнения. Когда я вызываю unshift, полимер, кажется, добавляет новый <upload file>
в конец, а затем повторно применяет свойства к каждому <upload file>
. Поскольку unshift добавляет новый элемент в начало массива, а не в конец, значение каждого индикатора выполнения «изменяется» со значения для элемента, который ранее был в этом индексе, на новое значение, вызывая переход CSS для этого изменения. Это особенно заметно, когда файл находится на уровне 100% и добавляется новый файл, в результате чего индикатор выполнения нового файла ненадолго переходит со 100% на 0%. Есть ли способ обойти это поведение? Спасибо за вашу помощь.
Правка: Я придумал обходной путь, хотя это и не красиво. Я добавил наблюдателя в file
свойство в UploadFile
классе полимерных элементов:
static get properties() {
return {
file: {
observer: '_fileChanged',
},
}
}
_fileChanged() {
this.$['progress-bar'].classList.add('no-transition');
setTimeout(() => {
this.$['progress-bar'].classList.remove('no-transition');
}, 0);
}
Наборы классов CSS no-transition
transition: none
.