Индикаторы выполнения используются в интерфейсе для передачи пользователям информации, связанной с известным ходом выполнения определенной операции. Они визуально показывают, насколько далеко продвинулась операция, и могут быть круговыми или горизонтальными. Они также могут быть неопределенными, чтобы указать на загрузку или обработку данных. В этой статье мы узнаем, как создать горизонтальный индикатор выполнения с помощью линейного компонента Vuetify progress.

Компонент v-progress-linear

Vuetify предоставляет компонент v-progress-linear для создания горизонтального индикатора выполнения.

<template>
  <v-app>
    <v-progress-linear></v-progress-linear>
  </v-app>
</template>
<script>
export default {
  name: 'App',
};
</script>

Значение индикатора выполнения

Компонент линейного прогресса поставляется с реквизитом value, который мы можем использовать для установки индикатора выполнения на определенное значение между 0 и 100 включительно:

<template>
  <v-app>
    <v-row justify="center" class="ma-4">
      <v-col sm="6">
        <v-progress-linear value="40"></v-progress-linear>
      </v-col>
    </v-row>
  </v-app>
</template>
<script>
export default {
  name: 'App',
};
</script>

Прогресс Линейная v-модель

Мы можем настроить двустороннюю привязку между значением индикатора выполнения и переменной, используя v-model:

<template>
  <v-app>
    <v-row justify="center" class="ma-4">
      <v-col sm="6">
        <v-progress-linear v-model="value"></v-progress-linear>
      </v-col>
    </v-row>
  </v-app>
</template>
<script>
export default {
  name: 'App',
  data: () => ({
    value: 30,
  }),
};
</script>

Чтобы увидеть эту двустороннюю привязку в действии, давайте создадим две кнопки для изменения значения индикатора выполнения и некоторый текст для отображения этого значения. Мы разнесли кнопки с помощью одного из вспомогательных классов Vuetify spacing (ma-2).

<template>
  <v-app>
    <v-row justify="center" class="ma-4">
      <v-col sm="6">
        <v-row>
          <v-progress-linear v-model="value"></v-progress-linear>
        </v-row>
        <v-row justify="center">{{ value }}%</v-row>
        <v-row justify="center">
          <v-btn class="ma-2" @click="value -= 10" color="red" dark>
            -10
          </v-btn>
          <v-btn class="ma-2" @click="value += 10" color="green" dark>
            +10
          </v-btn>
        </v-row>
      </v-col>
    </v-row>
  </v-app>
</template>
<script>
export default {
  name: 'App',
  data: () => ({
    value: 30,
  }),
};
</script>

Украсьте с помощью Vuetify

Полное руководство по созданию элегантных веб-приложений с помощью платформы Vuetify Material Design.

Получите бесплатную копию здесь.

Значение линейного буфера прогресса

Состояние буфера одновременно представляет два значения. Первичное значение контролируется v-model, а значение буфера контролируется реквизитом buffer-value:

<template>
  <v-app>
    <v-row justify="center" class="ma-4">
      <v-col sm="8">
        <v-progress-linear
          v-model="value"
          :buffer-value="bufferValue"
        ></v-progress-linear>
        <br />
        <v-progress-linear
          v-model="value"
          :buffer-value="bufferValue"
          color="green"
        ></v-progress-linear>
        <br />
        <v-progress-linear
          v-model="value"
          :buffer-value="bufferValue"
          color="orange"
        ></v-progress-linear>
        <br />
        <v-progress-linear
          v-model="value"
          :buffer-value="bufferValue"
          color="purple accent-4"
        ></v-progress-linear>
      </v-col>
    </v-row>
  </v-app>
</template>
<script>
export default {
  name: 'App',
  data() {
    return {
      value: 10,
      bufferValue: 20,
      interval: 0,
    };
  },
  watch: {
    value(val) {
      if (val < 100) return;
      this.value = 0;
      this.bufferValue = 10;
      this.startBuffer();
    },
  },
  mounted() {
    this.startBuffer();
  },
  beforeDestroy() {
    clearInterval(this.interval);
  },
  methods: {
    startBuffer() {
      clearInterval(this.interval);
      this.interval = setInterval(() => {
        this.value += Math.random() * (15 - 5) + 5;
        this.bufferValue += Math.random() * (15 - 5) + 6;
      }, 1000);
    },
  },
};
</script>

Пользовательские цвета индикатора выполнения

Линейный компонент прогресса Vuetify поставляется с реквизитом color, который позволяет нам настраивать цвет горизонтального индикатора выполнения:

<template>
  <v-app>
    <v-row justify="center" class="ma-4">
      <v-col sm="8">
        <v-progress-linear
          background-color="blue"
          color="red accent-2"
          value="20"
        ></v-progress-linear>
        <br />
        <v-progress-linear
          background-color="grey"
          color="yellow"
          value="40"
        ></v-progress-linear>
        <br />
        <v-progress-linear
          background-color="green lighten-3"
          color="green"
          value="60"
        ></v-progress-linear>
      </v-col>
    </v-row>
  </v-app>
</template>
<script>
export default {
  name: 'App',
};
</script>

Прогресс Линейный Неопределенный

Мы можем отобразить неопределенный индикатор выполнения с помощью реквизита indeterminate.

<template>
  <v-app>
    <v-row justify="center" class="ma-4">
      <v-col sm="8">
        <v-progress-linear indeterminate color="red"></v-progress-linear>
        <br />
        <v-progress-linear indeterminate color="primary"></v-progress-linear>
        <br />
        <v-progress-linear indeterminate color="green"></v-progress-linear>
      </v-col>
    </v-row>
  </v-app>
</template>
<script>
export default {
  name: 'App',
};
</script>

Индикатор выполнения будет непрерывно анимироваться, когда он не определен:

Перевернутый индикатор выполнения

Установка реквизита reverse на true отобразит перевернутый индикатор выполнения (справа налево в режиме LTR и слева направо в режиме RTL).

<template>
  <v-app>
    <v-row justify="center" class="ma-4">
      <v-col sm="8">
        <v-progress-linear
          color="indigo"
          value="15"
          reverse
        ></v-progress-linear>
        <br />
        <v-progress-linear
          color="teal"
          indeterminate
          reverse
        ></v-progress-linear>
        <br />
        <v-progress-linear
          buffer-value="55"
          color="red accent-2"
          reverse
          stream
          value="30"
        ></v-progress-linear>
        <br />
        <v-subheader
          >In specific cases you may want progress to display in left-to-right
          mode regardless of the application direction (LTR or
          RTL):</v-subheader
        >
        <v-progress-linear
          :reverse="$vuetify.rtl"
          value="15"
          color="yellow darken-3"
        ></v-progress-linear>
      </v-col>
    </v-row>
  </v-app>
</template>
<script>
export default {
  name: 'App',
};
</script>

Прогресс Линейный Закругленный

Мы можем добавить радиус границы к линейному компоненту прогресса Vuetify, установив свойство rounded на true:

<template>
  <v-app>
    <v-row justify="center" class="ma-4">
      <v-col sm="8">
        <v-progress-linear
          color="blue accent-2"
          rounded
          value="100"
        ></v-progress-linear>
        <br />
        <v-progress-linear color="pink" rounded value="100"></v-progress-linear>
        <br />
        <v-progress-linear
          color="orange"
          rounded
          value="100"
        ></v-progress-linear>
        <br />
        <v-progress-linear
          color="purple accent-4"
          rounded
          value="100"
        ></v-progress-linear>
      </v-col>
    </v-row>
  </v-app>
</template>
<script>
export default {
  name: 'App',
};
</script>

Поток индикатора выполнения

Свойство stream работает с buffer-value, чтобы информировать пользователя о том, что происходит какое-то действие.

<template>
  <v-app>
    <v-row justify="center" class="ma-4">
      <v-col sm="8">
        <v-progress-linear
          color="yellow darken-3"
          buffer-value="0"
          stream
        ></v-progress-linear>
        <br />
        <v-progress-linear
          color="primary"
          buffer-value="0"
          value="20"
          stream
        ></v-progress-linear>
        <br />
        <v-progress-linear
          buffer-value="50"
          stream
          color="red"
        ></v-progress-linear>
        <br />
        <v-progress-linear
          buffer-value="60"
          value="40"
          stream
          color="green"
        ></v-progress-linear>
      </v-col>
    </v-row>
  </v-app>
</template>
<script>
export default {
  name: 'App',
};
</script>

Полосатый индикатор выполнения

Свойство striped применяет полосатый фон к части значения горизонтального индикатора выполнения.

<template>
  <v-app>
    <v-row justify="center" class="ma-4">
      <v-col sm="8">
        <v-progress-linear
          color="indigo"
          height="10"
          value="10"
          striped
        ></v-progress-linear>
        <br />
        <v-progress-linear
          color="cyan"
          height="10"
          value="20"
          striped
        ></v-progress-linear>
        <br />
        <v-progress-linear
          height="10"
          value="45"
          striped
          color="green"
        ></v-progress-linear>
        <br />
        <v-progress-linear
          value="60"
          height="10"
          striped
          color="orange"
        ></v-progress-linear>
      </v-col>
    </v-row>
  </v-app>
</template>
<script>
export default {
  name: 'App',
};
</script>

Слот по умолчанию

С слотом по умолчанию для линейного компонента прогресса мы можем отображать пользовательские компоненты внутри индикатора выполнения.

<template>
  <v-app>
    <v-row justify="center" class="ma-4">
      <v-col sm="8">
        <v-progress-linear
          :indeterminate="query"
          :query="true"
          height="25"
          value="30"
        >
          <template v-slot:default="{ value }">
            <strong>{{ value }}%</strong>
          </template>
        </v-progress-linear>
      </v-col>
    </v-row>
  </v-app>
</template>
<script>
export default {
  name: 'App',
  data: () => ({
    query: false,
  }),
};
</script>

Здесь мы просто отображаем значение индикатора выполнения в процентах:

Использование индикатора выполнения в качестве индикатора загрузки

Один из примеров, когда линейный компонент прогресса полезен, — это сообщение пользователю о том, что ответ ожидает ответа. Например, при получении фотографий пользователя с сервера в примере приложения для работы с фотографиями.

<template>
  <v-app>
    <v-app-bar app color="primary" dark>
      <v-app-bar-nav-icon></v-app-bar-nav-icon>
      <v-toolbar-title>Photos</v-toolbar-title>
      <v-spacer></v-spacer>
      <v-btn icon>
        <v-icon>mdi-share-variant</v-icon>
      </v-btn>
      <v-btn icon>
        <v-icon>mdi-magnify</v-icon>
      </v-btn>
      <v-btn icon>
        <v-icon>mdi-dots-vertical</v-icon>
      </v-btn>
    </v-app-bar>
    <v-container style="flex: 1">
      <v-row class="fill-height" align-content="center" justify="center">
        <v-col class="text-subtitle-1 text-center" cols="12">
          Getting your photos
        </v-col>
        <v-col cols="6">
          <v-progress-linear
            color="primary"
            indeterminate
            rounded
            height="6"
          ></v-progress-linear>
        </v-col>
      </v-row>
    </v-container>
  </v-app>
</template>
<script>
export default {
  name: 'App',
};
</script>

Использование индикатора выполнения в качестве загрузчика панели приложений

Индикатор выполнения также может функционировать как загрузчик панели приложений. С реквизитами absolute и bottom мы можем расположить его внизу панели приложения и контролировать его видимость с помощью реквизита active:

<template>
  <v-app>
    <v-system-bar>
      <v-spacer></v-spacer>
      <v-icon>mdi-square</v-icon>
      <v-icon>mdi-circle</v-icon>
      <v-icon>mdi-triangle</v-icon>
    </v-system-bar>
    <v-app-bar app color>
      <v-btn icon>
        <v-icon>mdi-arrow-left</v-icon>
      </v-btn>
      <v-toolbar-title>Books</v-toolbar-title>
      <v-progress-linear
        :active="loading"
        :indeterminate="loading"
        absolute
        bottom
        color="indigo"
      ></v-progress-linear>
      <v-spacer></v-spacer>
      <v-btn icon>
        <v-icon>mdi-magnify</v-icon>
      </v-btn>
      <v-btn icon>
        <v-icon>mdi-dots-vertical</v-icon>
      </v-btn>
    </v-app-bar>
    <v-container style="flex: 1">
      <v-row class="fill-height" align="center" justify="center">
        <v-scale-transition>
          <div v-if="!loading" class="text-center">
            <v-btn color="indigo" dark @click="loading = true">
              Start loading
            </v-btn>
          </div>
        </v-scale-transition>
      </v-row>
    </v-container>
  </v-app>
</template>
<script>
export default {
  name: 'App',
  data: () => ({
    loading: false,
  }),
  watch: {
    loading(val) {
      if (!val) return;
      setTimeout(() => (this.loading = false), 3000);
    },
  },
};
</script>

Заключение

Индикатор выполнения передает пользователю информацию о текущем ходе текущего события в приложении. Используйте линейный компонент прогресса Vuetify (v-progress-linear) и его различные реквизиты для создания и настройки горизонтальных индикаторов выполнения.

Еженедельно получайте советы и руководства по Vuetify, Vue, JavaScript и другим ресурсам:http://eepurl.com/hRfyJL

Обновлено на: codingbeautydev.com