La barra de progreso de Vuetify no sincroniza el valor

Isaías Orozco Toledo

Tengo un ejemplo que replica lo que estoy haciendo en realidad. Cuando se inserta un nuevo elemento en la matriz, el contador aumenta y establece el valor en el progreso.

Para el ejemplo, preparé un JSFiddle: aquí

new Vue({
  el: '#app',
  data () {
    return {
      valueDeterminate: 0,
      total: 1000,
      timeOut: 0,
      iteraciones: 1000
    }
  },
  methods: {
    async Click() {
      var arr = [];
      var sum = 0;   
      this.valueDeterminate = 0;
      await this.forEach(this.iteraciones, async (i) => {
        await this.Sleep(1);
        arr.push(1);
        sum++;
        this.SetProgressBar(sum);
        clearTimeout(this.timeOut);
      })      
    },
    SetProgressBar(num) {
      if (num) {
        this.valueDeterminate = Math.round(this.Map(num));
      }
    },
    Map(value) {
      return ((value - 0) * (100 - 0)) / (this.total - 0) + 0;
    },
    async forEach(arr, callback) {
      for(let i = 0; i < arr; i++){
        await callback(arr[i], i);
      }
    },
    Sleep(milisegundos) {
      return new Promise(resolve => this.timeOut = setTimeout(resolve, milisegundos));
    },
  }
})

Simplemente edite el valor de 'total' e 'iteraciones' (ambos deben ser iguales) y ejecute. Si el número es alto, como 1000, el progreso no tiene problemas. Pero si los valores son <= 100, el progreso no sincroniza el valor y su modelo v muestra el valor real

falda

Parte del problema es la transición animada en la barra de progreso. Si incluye esto en el CSS, todo funciona bien:

.v-progress-linear__bar, .v-progress-linear__bar__determinate {
  transition: none;
}

Si bien eso es suficiente para 'arreglarlo', no es toda la historia. Así que deshagámonos de ese truco y profundicemos un poco más ...

El siguiente problema es que está actualizando la barra de progreso con tanta frecuencia que la transición animada no tiene la oportunidad de comenzar. Cada vez que actualice el valor, comenzará de nuevo desde el ancho actual. Porque esto sucede en cada fotograma cuyo ancho 'actual' nunca sale de 0. El ancho de destino se hace cada vez más grande, pero se atasca en el primer fotograma de la animación, lo que mantiene el ancho en 0.

La razón por la que parece funcionar bien con valores grandes, como 1000, es el redondeo. Varios valores consecutivos se redondearán al mismo valor, por lo que, efectivamente, nada cambia, lo que permite que la transición comience. Pero para valores más pequeños, está actualizando el valor cada vez, por lo que la animación no puede ir más allá del primer fotograma.

Para ver el efecto del redondeo directamente, intente cambiar esta línea:

this.valueDeterminate = Math.round(this.Map(num));

a esto:

this.valueDeterminate = this.Map(num);

Asegúrese de eliminar el truco CSS que describí antes antes de ejecutarlo. Verá que la barra de progreso ahora se detiene incluso con un total de 1000. Sin el redondeo actuando como un búfer, estamos bombardeando la barra de progreso con pequeñas actualizaciones y restableciendo la transición animada.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

La barra de progreso de Vuetify no sincroniza el valor

La barra de progreso de Vuetify no sincroniza el valor

Centrar el valor de progreso en el fondo de la barra de progreso

¿Cómo incrementar el valor en la barra de progreso?

La barra de progreso supera el valor máximo

¿La barra de progreso de Bootstrap no muestra el progreso?

La barra de progreso ralentiza el ciclo

Imprimir el valor de la barra de progreso en el cuadro de texto

La barra de progreso no muestra el progreso si no está lleno

La barra de progreso no muestra el progreso actual

No agregue un borde a la derecha si el valor de la barra de progreso es 0

¿Cómo cambiar el valor de la barra de progreso y la etiqueta?

¿Cómo configurar el valor máximo 300 de la barra de progreso de bootstrap?

El valor de la barra de progreso de Kivy no se actualiza

Cómo restablecer el valor de la barra de progreso de Bootstrap a 0 usando jquery

Barra de progreso de Qt: muestra el valor doble

Los colores de la barra de progreso no se actualizan según el valor

¿Cómo cambiar el radio del borde del valor de la barra de progreso?

¿Cómo incremento y decremento el valor de la barra de progreso en pointerdown & pointerup?

valor de la barra de progreso angularjs del alcance

Valor incorrecto de la barra de progreso informado por backgroundworker

¿Cómo personalizo la barra de progreso, ese usuario puede arrastrar y cambiar el valor?

instalar el paquete de Python de la barra de progreso

Cómo actualizar el valor de la vista de texto según el progreso de la barra de progreso en Kotlin

El valor mínimo de la barra de progreso de C # no se actualiza desde el cuadro de texto

¿Cómo cambiar el color de la barra de progreso?

Cambiar el ancho de la barra de progreso con javascript

Colorear el 50% de la barra de progreso

La barra de progreso de Bootstrap supera el 100%