直播商城系統原始碼,環形進度條元件
直播商城系統原始碼,環形進度條元件
<template> <div class="content" ref="box"> <svg :id="idStr" style="transform: rotate(-90deg)" :width="width" :height="width" xmlns=" > <linearGradient :id="`gradient-${id}`" gradientUnits="userSpaceOnUse"> <stop v-for="(item, index) in gradientsColor" :key="index" :offset="item.offset" :stop-color="item.color" /> </linearGradient> <circle :r="(width-radius)/2" :cy="width/2" :cx="width/2" :stroke-width="radius" :stroke="backgroundColor" fill="none" /> <circle v-if="gradientsColorShow" ref="$bar" :r="(width-radius)/2" :cy="width/2" :cx="width/2" :stroke="gradientsColor ? `url(#gradient-${id})` : barColor" :stroke-width="radius" :stroke-linecap="isRound ? 'round' : 'square'" :stroke-dasharray="(width-radius)*3.14" :stroke-dashoffset="dashoffsetValue" fill="none" /> </svg> <div class="center_text"> <p v-if="!$slots.default" class="title">{{progress}}%</p> <slot></slot> </div> </div> </template> <script> // import _ from "lodash"; export default { props: { widthPresent: { type: Number, default: 1 }, gradientsColor: { type: [Boolean, Array], default: false }, radius: { type: [Number, String], default: 20 }, // 進度條厚度 progress: { type: [Number, String], default: 20 }, // 進度條百分比 barColor: { type: String, default: "#1890ff" }, // 進度條顏色 backgroundColor: { type: String, default: "rgba(0,0,0,0.3)" }, // 背景顏色 isAnimation: { // 是否是動畫效果 type: Boolean, default: true }, isRound: { // 是否是圓形畫筆 type: Boolean, default: true }, id: { // 元件的id,多元件共存時使用 type: [String, Number], default: 1 }, duration: { // 整個動畫時長 type: [String, Number], default: 1000 }, delay: { // 延遲多久執行 type: [String, Number], default: 200 }, timeFunction: { // 動畫緩動函式 type: String, default: "cubic-bezier(0.99, 0.01, 0.22, 0.94)" } }, data() { return { width: 200, idStr: "", oldValue: 0 }; }, computed: { gradientsColorShow: function() { return true; }, dashoffsetValue: function() { const { isAnimation, width, radius, progress, oldValue } = this; return isAnimation ? ((width - radius) * 3.14 * (100 - oldValue)) / 100 : ((width - radius) * 3.14 * (100 - progress)) / 100; } }, watch: { id: function() { this.idStr = `circle_progress_keyframes_${this.id || 1}`; }, progress: function(newData, oldData) { if (newData !== oldData) { this.oldValue = oldData; this.setAnimation(); } } }, mounted() { this.idStr = `circle_progress_keyframes_${this.id || 1}`; let self = this; this.setCircleWidth(); this.setAnimation(); // 此處不能使用window.onresize window.addEventListener("resize", function() { self.setCircleWidth(); self.setAnimation(self); }); }, methods: { setCircleWidth() { const { widthPresent } = this; this.$nextTick(() => { let box = this.$refs.box; let width = box.clientWidth * widthPresent; let height = box.clientHeight * widthPresent; let cW = width > height ? height : width; this.width = cW; }) }, setAnimation() { let self = this; if (self.isAnimation) { // 重複定義判斷 if (document.getElementById(self.idStr)) { self.$refs.$bar.classList.remove(`circle_progress_bar${self.id}`); } this.$nextTick(() => { this.startAnimation(); }); } }, startAnimation() { // 生成動畫樣式檔案 let style = document.createElement("style"); style.id = this.idStr; style.type = "text/css"; style.innerHTML = ` @keyframes circle_progress_keyframes_name_${this.id} { from {stroke-dashoffset: ${((this.width - this.radius) * 3.14 * (100 - this.oldValue)) / 100}px;} to {stroke-dashoffset: ${((this.width - this.radius) * 3.14 * (100 - this.progress)) / 100}px;}} .circle_progress_bar${ this.id } {animation: circle_progress_keyframes_name_${this.id} ${ this.duration }ms ${this.delay}ms ${this.timeFunction} forwards;}`; // 新增新樣式檔案 document.getElementsByTagName("head")[0].appendChild(style); // 往svg元素中新增動畫class this.$refs.$bar.classList.add(`circle_progress_bar${this.id}`); } } }; </script> <style scoped> .content { height: 100%; display: flex; justify-content: center; align-items: center; } .center_text { position: absolute; font-size: 16px; font-weight: bold; } </style>
以上就是 直播商城系統原始碼,環形進度條元件,更多內容歡迎關注之後的文章
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2928236/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 直播電商平臺開發,環形進度條元件元件
- 一對一聊天原始碼,vue實現環形進度條元件原始碼Vue元件
- 直播app系統原始碼,簡單易上手的進度條APP原始碼
- 直播app系統原始碼,固定速度的進度條顯示APP原始碼
- app直播系統原始碼,點選生成條形碼APP原始碼
- app直播原始碼,edusoho直播回放增加進度條APP原始碼
- canvas環形進度條效果Canvas
- [-Flutter 自定義元件-] 圓形進度條Flutter元件
- 實現環形進度條效果【一】
- Android自定義圓形進度條原始碼解析Android原始碼
- 成品直播原始碼推薦,Flutter波浪進度條WaveProgressBar原始碼Flutter
- 直播平臺搭建原始碼,uniapp progress進度條原始碼APP
- 直播網站原始碼,Canvas實現圓形時間倒數計時進度條網站原始碼Canvas
- canvas百分比環形進度條程式碼Canvas
- 直播商城原始碼,去掉導航條和tabbar線條原始碼tabBar
- 自定義圓形進度條控制元件控制元件
- 直播平臺搭建原始碼,canvas 畫一條波浪線 進度條原始碼Canvas
- 直播商城系統原始碼,播放器aliPlayer自定義清晰度切換原始碼播放器
- 直播商城原始碼包含哪些技術?商城直播系統開發難點有哪些?原始碼
- Android花樣loading進度條(三)-配文字環形進度條Android
- jQuery環形旋轉載入進度條效果jQuery
- svg環形百分比進度條SVG
- 短視訊商城系統,Android進度條,自定義進度條,顯示百分比Android
- 可拖拽圓形進度條元件(支援移動端)元件
- canvas環形百分比進度條效果Canvas
- 直播系統開發,實現在進度條中顯示文字顯示進度
- 直播原始碼網站,各類進度條的設定與調整原始碼網站
- 直播平臺原始碼,通知欄中顯示滑動的進度條原始碼
- 直播帶貨平臺原始碼,利用ProgressBar實現垂直、水平進度條原始碼
- Flutter 波浪圓形進度條Flutter
- 自定義圓形進度條
- SVG畫圓形進度條SVG
- svg和css3建立環形漸變進度條SVGCSSS3
- app直播原始碼,實現進度條自增長及漸變樣式APP原始碼
- canvas錐形漸變進度條Canvas
- 影片直播系統原始碼,flutter Wrap 自動換行元件原始碼Flutter元件
- 直播商城原始碼,實現系統的日間/夜間模式切換原始碼模式
- 直播app系統原始碼,css優化滾動條樣式APP原始碼CSS優化