AngularJS UI Bootstrap menggabungkan dua bilah kemajuan

Saya telah menyiapkan dua bilah kemajuan di UI Bootstrap, namun tujuan saya adalah menggabungkannya menjadi satu, bilah utama dan bilah sekunder yang hanya berbentuk bilah vertikal.

Berikut adalah kode HTML untuk bilah kemajuan saya:

<div>
  <h3 class="inline-block no-margin">Main</h3>
  <uib-progressbar value="95"
                   class="progress-xs no-radius"
                   type="success"></uib-progressbar>
  <h4 class="no-margin">SubCategory</h4>
  <uib-progressbar value="50"
                   class="progress-xs no-radius no-margin"
                   type="danger"></uib-progressbar>
</div>

Pertanyaan saya adalah bagaimana cara menggabungkan keduanya sehingga yang kedua hanya muncul sebagai bilah vertikal kecil di bilah utama?

Sehingga bilah utama menampilkan 95% bilah dan subkategori hanya menampilkan bilah vertikal pada 50%. masukkan deskripsi gambar di sini
Ada contoh serupa untuk ini di di sini disebut garis batas, tetapi ini adalah perpustakaan lama lainnya.


person cplus    schedule 04.01.2017    source sumber
comment
Kalau saya paham betul, tujuan dari bilah kemajuan kedua adalah menggambar garis vertikal pada bilah kemajuan pertama?   -  person Ortomala Lokni    schedule 06.01.2017
comment
@OrtomalaLokni ya, daripada punya bilah kemajuan lain, cukup bilah vertikal, seperti | yang akan bergerak ke kanan dan ke kiri sesuai nilainya.   -  person cplus    schedule 06.01.2017


Jawaban (3)


Anda dapat menggunakan ng-style untuk memperbarui posisi garis vertikal div untuk mengatasi masalah ini. Ini akan memudahkan Anda mengatur posisi dan nilai bilah vertikal. Lihat ini contoh kerja di plunkr.:

HTML

<uib-progressbar animate="false" value=95 type="success"><b>95%</b></uib-progressbar>
<div id="vertical-mark" ng-style="style()">&nbsp;{{mark}}%</div>

JS

$scope.mark = 50;
  $scope.style = function() {
    return {
      'left': $scope.mark + '%'
    }
  }

CSS

#vertical-mark {
  position:relative;
  border-left:1px solid #000;
  height:50px;
  top:-57px;
}

Sebagai alternatif saya juga menambahkan implementasi serupa dengan bilah kemajuan bertumpuk.

person Divyanshu Maithani    schedule 07.01.2017

Saya belum mencobanya sendiri, tapi itulah yang terlintas di benak saya ketika melihat pertanyaan Anda.

Anda dapat memodifikasi CSS dari ui-progressbars sedemikian rupa sehingga saling tumpang tindih; mungkin dengan position:absolute atau apa pun. Ini akan memungkinkan penanda numerik untuk duduk bersebelahan seperti yang Anda inginkan.

Selanjutnya, Anda dapat memodifikasi CSS bilah itu sendiri. Setiap bilah yang kurang dari maksimal, mungkin memberinya kelas .no-fill atau semacamnya. Ini akan rumit, tetapi dengan cara itu Anda dapat memiliki bilah apa pun yang kurang dari % maksimal agar hanya terdiri dari properti border-right, sedangkan bilah % maks akan menjadi bilah dengan latar belakang dan semua gaya bilah kemajuan normal.

Hal yang mungkin muncul adalah Anda mungkin juga harus mengurutkan z-index batang sehingga batang dengan nilai terbesar berada di belakang nilai yang lebih kecil dan garis vertikalnya muncul.

Semoga beruntung!


PEMBARUAN AKHIR (dengan plunkr)

tangkapan layar plunkr

JS

$scope.stacked = [{
  value: 55,
  type: 'info'
}, {
  value: 95,
  type: 'success'
}];

HTML

<div class="progress-wrapper">
  <uib-progress max="100" ng-repeat="bar in stacked | orderBy:'value':true">
    <uib-bar value="bar.value" type="{{bar.type}}">
      <span class="marker" ng-hide="bar.value < 5">
          {{bar.value}}%
        </span>
    </uib-bar>
  </uib-progress>
</div>

CSS

/* wrapper to help us contain the bars and their positioning */
.progress-wrapper {
  position: relative;
  padding-top: 30px;
}

/* make all progress bars the same, no bg so they 'stack' */
.progress-wrapper .progress {
  width: 100%;
  position: absolute;
  overflow: visible;
  background: none;
}

/* first child is the background bar, give it color */
.progress-wrapper .progress:first-child {
  background: #EEE;
}

/* make all bars invisible and with a right, border;
   except the last/furthest back bar, give it color only
*/
.progress-wrapper .progress .progress-bar {
  background: none;
  border-right: solid 2px #FFF;
}
.progress-wrapper .progress:first-child .progress-bar {
  background: #0AF;
  border-right: none;
}

/* makes sure that markers behave,
   otherwise they'll fly away
*/
.progress .progress-bar {
  position: relative;
}

/* style for marker element and drop triangle */
.progress .marker {
  position: absolute;
  padding: 0 2px;
  top: -30px;
  right: -15px;
  color: #FFF;
  background: #000;
}
.progress .marker:after {
  content: '';
  width: 10px;
  height: 10px;
  background: #000;
  position: absolute;
  left: 30%;
  bottom: -5px;
  transform: rotate(45deg);
}
person coblr    schedule 06.01.2017
comment
inilah yang kuinginkan! bisakah Anda membuatnya dengan bilah vertikal dan pesan teks yang akan ditampilkan pada posisi itu juga. terima kasih - person cplus; 06.01.2017
comment
Saat ini saya tidak punya waktu untuk membuatnya dengan tag dan semua yang ada di tangkapan layar. Saya berasumsi bahwa Anda sudah memiliki beberapa kode yang berfungsi, Anda hanya ingin bilahnya ditumpuk satu sama lain. Jika Anda memerlukan solusi yang lebih lengkap, saya harus mengerjakannya setelah bekerja, tetapi plunkr akan membuat Anda atau pengembang ui Anda lebih dekat dengan apa yang Anda cari untuk sementara waktu. Anda juga lupa bertanya tentang bayaran saya;) - person coblr; 06.01.2017
comment
saya akan menunggu jawaban lengkap Anda segera setelah Anda punya waktu. beri tahu saya bayaran Anda juga! - person cplus; 07.01.2017
comment
Ini dia! Saya ingin memberikan penghargaan kepada @bvakiti karena saya menggunakan plunkr mereka untuk memulainya. Itu hanya memindahkan satu elemen pengulangan, dan menambahkan semua CSS yang sesuai. tidak perlu biaya :). selamat tahun baru! - person coblr; 07.01.2017

Anda dapat menggunakan bilah kemajuan bertumpuk dengan beberapa gaya khusus.

<uib-progress><uib-bar ng-repeat="bar in stacked track by $index" value="bar.value" type="{{bar.type}}"><span ng-hide="bar.value < 5">{{bar.value}}%</span></uib-bar></uib-progress>

$scope.stacked = [{
  value: 10,
  type: 'info'
}, {
  value: 35,
  type: 'success'
}];

});

masukkan deskripsi gambar di sini

Lihat bilah kemajuan di https://angular-ui.github.io/bootstrap/ ini

Contoh saya ada di sini https://plnkr.co/edit/9qCP1lV40BQ9DYDHvayo?p=preview

Saya telah mengedit kode di bilah kemajuan yang ditumpuk. Menurutku ini membantu.

Anda dapat menambahkan gaya khusus ke dalamnya untuk menunjukkan nilai kemajuan.

person bvakiti    schedule 06.01.2017
comment
Solusi yang bagus. Tautan plunkr Anda tidak berfungsi. Membawa Anda ke plunkr kosong. Pertanyaan: apakah 10 dan 35 ditambahkan di sini. Sepertinya lebar batang itu sekitar 45%. Jika persentasenya sekitar 95 dan 55, apakah solusi ini akan tetap berhasil? - person coblr; 06.01.2017
comment
Yap, meski elegan, ini menunjukkan hasil yang salah saat menggunakan angka besar. Pendekatan bertumpuk tampaknya hanya mendukung banyak batang ketika jumlah nilainya ‹ 100%. Jika kita menggunakan dua atau lebih yang sama dengan › 100, bilahnya tidak akurat. - person coblr; 06.01.2017
comment
Bisakah Anda mencoba memberikan atribut max ke uib-progress. plnkr.co/edit/9qCP1lV40BQ9DYDHvayo?p=preview Mengubah nilai maksimal tampaknya berhasil - person bvakiti; 06.01.2017
comment
jawaban ini memberikan solusi alternatif! jika tidak ada yang memberikan solusi untuk menggunakan bilah vertikal, maka saya akan menerimanya. Saya tidak keberatan dengan solusi lain yang menggunakan perpustakaan atau paket lain. - person cplus; 06.01.2017