直播電商平臺開發,環形進度條元件
直播電商平臺開發,環形進度條元件
<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-2949822/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 直播商城系統原始碼,環形進度條元件原始碼元件
- 直播平臺軟體開發,讓原本沒有進度條的頁面顯示進度條
- 直播平臺製作,使用 NProgress 進度條
- canvas環形進度條效果Canvas
- 直播平臺搭建原始碼,uniapp progress進度條原始碼APP
- 直播平臺搭建原始碼,canvas 畫一條波浪線 進度條原始碼Canvas
- [-Flutter 自定義元件-] 圓形進度條Flutter元件
- 直播app開發搭建,js進度條功能APPJS
- 實現環形進度條效果【一】
- 一對一聊天原始碼,vue實現環形進度條元件原始碼Vue元件
- 自定義圓形進度條控制元件控制元件
- C++ Qt開發:ProgressBar進度條元件C++QT元件
- SAAS平臺每日開發進度
- 直播電商平臺開發,輸入框的防抖
- 直播電商平臺開發,列太多,捲軸顯示
- Android花樣loading進度條(三)-配文字環形進度條Android
- 如何開發直播平臺,直播平臺開發需要CDN嗎
- jQuery環形旋轉載入進度條效果jQuery
- svg環形百分比進度條SVG
- 直播電商平臺開發,橫豎屏切換的方法
- 直播平臺原始碼,通知欄中顯示滑動的進度條原始碼
- 直播帶貨平臺原始碼,利用ProgressBar實現垂直、水平進度條原始碼
- 直播平臺開發經驗分享——直播平臺搭建環境配置詳解及分析
- 可拖拽圓形進度條元件(支援移動端)元件
- 直播軟體開發,漸變色任務進度條
- canvas環形百分比進度條效果Canvas
- 直播電商平臺開發,Layui給標籤新增點選事件UI事件
- 直播電商平臺開發,vue 自定義指令過濾特殊字元Vue字元
- 直播平臺製作,Glide載入網路圖,進度條顯示IDE
- 直播系統開發,實現在進度條中顯示文字顯示進度
- 直播平臺開發,載入網頁、html檔案顯示載入進度網頁HTML
- 直播app開發,點選螢幕時顯示進度條APP
- Flutter 波浪圓形進度條Flutter
- 自定義圓形進度條
- SVG畫圓形進度條SVG
- svg和css3建立環形漸變進度條SVGCSSS3
- canvas百分比環形進度條程式碼Canvas
- 直播電商平臺開發,Android | 圖片縮放、自動居中Android