AngularJS UI Bootstrap ผสานสองแถบความคืบหน้า

ฉันได้ตั้งค่าแถบความคืบหน้าสองแถบใน UI Bootstrap แต่เป้าหมายของฉันคือการรวมพวกมันให้เป็นแถบหลักและแถบรองซึ่งอยู่ในรูปแบบของแถบแนวตั้งเท่านั้น

นี่คือโค้ด HTML สำหรับแถบความคืบหน้าของฉัน:

<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>

คำถามของฉันคือฉันจะรวมสองสิ่งนี้เข้าด้วยกันเพื่อให้อันรองปรากฏเป็นแถบแนวตั้งขนาดเล็กบนแถบหลักได้อย่างไร

เพื่อให้แถบหลักแสดง 95% ของแถบและหมวดหมู่ย่อยแสดงเฉพาะ แถบแนวตั้งที่ 50% ป้อนคำอธิบายรูปภาพที่นี่
มีตัวอย่างที่คล้ายกัน สำหรับสิ่งนี้ใน ที่นี่ เรียกว่าเส้นจำกัด แต่เป็นไลบรารีเก่าอีกแห่งหนึ่ง


person cplus    schedule 04.01.2017    source แหล่งที่มา
comment
ถ้าฉันเข้าใจดี เป้าหมายของแถบความคืบหน้าอันที่สองคือการวาดเส้นแนวตั้งบนแถบความคืบหน้าอันแรก   -  person Ortomala Lokni    schedule 06.01.2017
comment
@OrtomalaLokni ใช่ แทนที่จะมีแถบความคืบหน้าอื่น แค่แถบแนวตั้ง เช่น | ที่จะเลื่อนไปทางขวาและซ้ายตามค่าของมัน   -  person cplus    schedule 06.01.2017


คำตอบ (3)


คุณสามารถใช้ ng-style เพื่ออัปเดตตำแหน่งของเส้นแนวตั้ง div เพื่อแก้ไขปัญหานี้ได้ ซึ่งจะช่วยให้คุณสามารถกำหนดตำแหน่งและค่าของแถบแนวตั้งได้อย่างง่ายดาย ดูตัวอย่างการทำงานของ นี้ บน 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>

เจเอส

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

ซีเอสเอส

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

อีกทางเลือกหนึ่ง ฉันได้เพิ่มการใช้งานที่คล้ายกันด้วยแถบความคืบหน้าแบบเรียงซ้อน

person Divyanshu Maithani    schedule 07.01.2017

ฉันไม่ได้ลองทำด้วยตัวเอง แต่สิ่งที่เข้ามาในใจเมื่อเห็นคำถามของคุณ

คุณสามารถแก้ไข CSS ของ ui-progressbars เพื่อให้ซ้อนทับกัน อาจจะด้วย position:absolute หรืออะไรเกี่ยวกับคุณ ซึ่งจะทำให้เครื่องหมายตัวเลขทั้งหมดนั่งติดกันตามที่คุณต้องการ

จากนั้น คุณสามารถแก้ไข CSS ของแถบได้ด้วยตนเอง แถบใดๆ ที่น้อยกว่าค่าสูงสุด อาจให้คลาส .no-fill หรืออะไรสักอย่างแก่พวกเขา อาจเป็นเรื่องยาก แต่ด้วยวิธีนี้ คุณสามารถมีแถบใดๆ ที่น้อยกว่า max % เพื่อให้ประกอบด้วยคุณสมบัติ border-right เท่านั้น ในขณะที่แถบ % สูงสุดจะเป็นแถบที่มีพื้นหลังและรูปแบบแถบความคืบหน้าปกติทั้งหมด

สิ่งที่อาจปรากฏขึ้นคือคุณอาจต้องเรียงลำดับแท่ง ' z-index เพื่อให้แท่งค่าที่ใหญ่ที่สุดอยู่ด้านหลังค่าที่น้อยกว่าและเส้นแนวตั้งปรากฏขึ้น

ขอให้โชคดี!


การอัปเดตครั้งสุดท้าย (ด้วย 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>

ซีเอสเอส

/* 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
นี่คือสิ่งที่ฉันต้องการ! คุณสร้างมันขึ้นมาด้วยแถบแนวตั้งและข้อความที่จะแสดงในตำแหน่งนั้นด้วยได้ไหม ขอบคุณ - person cplus; 06.01.2017
comment
ตอนนี้ฉันไม่มีเวลาจริงๆ ที่จะสร้างแท็กและทุกสิ่งที่คุณมีในสกรีนช็อต ฉันคิดว่าคุณมีโค้ดที่ใช้งานได้อยู่แล้ว คุณแค่อยากให้แถบซ้อนกัน หากคุณต้องการโซลูชันที่สมบูรณ์กว่านี้ ฉันจะต้องดำเนินการแก้ไขหลังเลิกงาน แต่ plunkr ควรช่วยให้คุณหรือ ui dev ของคุณเข้าใกล้สิ่งที่คุณต้องการมากขึ้นในขณะเดียวกัน คุณลืมถามเกี่ยวกับค่าธรรมเนียมของฉันด้วย ;) - person coblr; 06.01.2017
comment
ฉันจะรอคำตอบทั้งหมดของคุณทันทีที่คุณมีเวลา แจ้งให้เราทราบค่าธรรมเนียมของคุณด้วย! - person cplus; 07.01.2017
comment
เอาล่ะ! ฉันต้องการให้เครดิต @bvakiti เพราะฉันใช้ plunkr เพื่อเริ่มต้น มันเป็นเพียงการย้ายการทำซ้ำขึ้นไปหนึ่งองค์ประกอบ และเพิ่ม CSS ที่เหมาะสมทั้งหมด ไม่ต้องเสียค่าธรรมเนียม :) สวัสดีปีใหม่! - person coblr; 07.01.2017

คุณสามารถใช้แถบความคืบหน้าแบบซ้อนกับสไตล์ที่กำหนดเองได้

<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'
}];

});

ป้อนคำอธิบายรูปภาพที่นี่

อ้างอิงแถบความคืบหน้าใน https://angular-ui.github.io/bootstrap/

ตัวอย่างของฉันอยู่ที่นี่ https://plnkr.co/edit/9qCP1lV40BQ9DYDHvayo?p=preview

ฉันได้แก้ไขโค้ดในแถบความคืบหน้าแบบเรียงซ้อนแล้ว คิดว่านี่ช่วยได้

คุณสามารถเพิ่มสไตล์ที่กำหนดเองเพื่อแสดงค่าความคืบหน้าได้

person bvakiti    schedule 06.01.2017
comment
ทางออกที่ดี ลิงก์ plunkr ของคุณใช้งานไม่ได้ นำคุณไปสู่ช่องว่างที่ว่างเปล่า คำถาม: มีการเพิ่ม 10 และ 35 ที่นี่หรือไม่ ดูเหมือนว่าแถบนั้นจะกว้างประมาณ 45% หากเปอร์เซ็นต์มีค่าประมาณ 95 และ 55 วิธีนี้จะยังใช้งานได้หรือไม่ - person coblr; 06.01.2017
comment
ใช่ แม้ว่าจะสวยงาม แต่สิ่งนี้จะแสดงผลลัพธ์ที่ไม่ถูกต้องเมื่อใช้ตัวเลขจำนวนมาก ดูเหมือนว่าวิธีการแบบเรียงซ้อนจะรองรับหลายแท่งเท่านั้นเมื่อผลรวมของค่าคือ ‹ 100% หากเราใช้สองตัวขึ้นไปที่เท่ากับ › 100 แถบจะไม่ถูกต้อง - person coblr; 06.01.2017
comment
คุณลองให้คุณสมบัติสูงสุดแก่ uib-progress ได้ไหม plnkr.co/edit/9qCP1lV40BQ9DYDHvayo?p=preview การเปลี่ยนค่าสูงสุดดูเหมือนว่าจะได้ผล - person bvakiti; 06.01.2017
comment
คำตอบนี้เป็นทางเลือกอื่น! ถ้าไม่มีใครให้วิธีแก้ปัญหาในการใช้แถบแนวตั้ง ฉันก็ยอมรับสิ่งนี้ ฉันไม่สนใจโซลูชันอื่นใดที่ใช้ไลบรารีหรือแพ็คเกจอื่น - person cplus; 06.01.2017