博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
需求實戰一
樣式展示
代碼展示
<template>
<ARow>
<ACol style="background-color:#F1F4F5 ">
<div class="info-card">
<div class="info-title">
數據總和
</div>
<div class="info-value">
100
</div>
</div>
</ACol>
</ARow>
</template>
<script setup lang="ts">
</script>
<style scoped>
:deep(.info-card){
width: 318px;
height: 116px;
background-color: #FFFFFF;
box-shadow: 0px 2px 10px 1px rgba(23,179,163,0.07);
border-radius: 4px;
}
:deep(.info-title){
font-size: 18px;
font-family: Microsoft YaHei;
font-weight: 400;
color: #333333;
line-height: 21px;
padding:20px 0 20px 30px;
}
:deep(.info-value){
font-size: 36px;
font-family: Microsoft YaHei;
font-weight: bold;
color: #333333;
line-height: 21px;
padding:0 0 0 30px;
}
</style>
代碼解讀
這段代碼是一個Vue組件的模板部分,用於展示一個信息卡片。具體解釋如下:
- <template> 標簽用於定義組件的模板部分。
- <ARow> 和 <ACol> 是自定義的組件,用於佈局。<ARow> 表示一行,<ACol> 表示一列。
- <ACol> 標簽內部有一個 style 屬性,用於設置背景顏色為 #F1F4F5。
- <div class="info-card"> 是一個具有 info-card 類名的 div 元素,表示信息卡片的容器。
- <div class="info-title"> 是一個具有 info-title 類名的 div 元素,表示信息卡片的標題。
- <div class="info-value"> 是一個具有 info-value 類名的 div 元素,表示信息卡片的數值。
接下來是 <script setup lang="ts"> 標簽,用於編寫組件的邏輯部分,這裡是空的,沒有任何代碼。
最後是 <style scoped> 標簽,用於定義組件的樣式。:deep() 是一個深度選擇器,用於選擇組件內部的元素。.info-card 表示選擇具有 info-card 類名的元素,設置了寬度、高度、背景顏色、陰影和邊框圓角等樣式。.info-title 和 .info-value 分別表示選擇具有對應類名的元素,設置了字體大小、字體樣式、顏色、行高和內邊距等樣式。
這段代碼的作用是創建一個信息卡片組件,顯示一個標題為 "數據總和",數值為 "100" 的信息。信息卡片具有特定的樣式,包括背景顏色、陰影和邊框圓角等。
需求實戰二
樣式展示
代碼展示
<template>
<div class="info-card">
<div class="info-title">
數據總和
</div>
<div class="info-value">
100
</div>
<div class="animation-container">
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
</div>
</div>
</template>
<script setup lang="ts"></script>
<style scoped>
.info-card {
width: 318px;
height: 200px;
background-color: #17b3a3;
border-radius: 8px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: relative;
}
.info-title {
font-size: 24px;
font-weight: bold;
color: #FFFFFF;
}
.info-value {
font-size: 48px;
font-weight: bold;
color: #FFFFFF;
}
.animation-container {
display: flex;
position: absolute;
bottom: 25px;
}
.circle {
width: 10px;
height: 10px;
background-color: #FFFFFF;
border-radius: 50%;
margin: 0 4px;
transform: scale(0);
animation: pulse 1.5s infinite cubic-bezier(0.215, 0.61, 0.355, 1) alternate;
}
.circle:nth-child(1) {
animation-delay: 0.1s;
}
.circle:nth-child(2) {
animation-delay: 0.2s;
}
.circle:nth-child(3) {
animation-delay: 0.3s;
}
.circle:nth-child(4) {
animation-delay: 0.4s;
}
.circle:nth-child(5) {
animation-delay: 0.5s;
}
.circle:nth-child(6) {
animation-delay: 0.6s;
}
@keyframes pulse {
0% {
opacity: 0;
transform: scale(0);
}
50% {
opacity: 1;
transform: scale(1);
}
100% {
opacity: 0;
transform: scale(0);
}
}
</style>
代碼解讀
這段代碼是一個Vue組件的模板部分,用於展示一個帶有動畫效果的信息卡片。具體解釋如下:
- <template> 標簽用於定義組件的模板部分。
- <div class="info-card"> 是一個具有 info-card 類名的 div 元素,表示信息卡片的容器。
- <div class="info-title"> 是一個具有 info-title 類名的 div 元素,表示信息卡片的標題。
- <div class="info-value"> 是一個具有 info-value 類名的 div 元素,表示信息卡片的數值。
- <div class="animation-container"> 是一個具有 animation-container 類名的 div 元素,用於容納動畫效果的圓圈。
- <div class="circle"> 是一個具有 circle 類名的 div 元素,表示一個圓圈。
接下來是 <script setup lang="ts"> 標簽,用於編寫組件的邏輯部分,這裡是空的,沒有任何代碼。
最後是 <style scoped> 標簽,用於定義組件的樣式。.info-card 表示選擇具有 info-card 類名的元素,設置了寬度、高度、背景顏色、邊框圓角等樣式,並使用了 Flex 佈局使內容垂直居中。.info-title 和 .info-value 分別表示選擇具有對應類名的元素,設置了字體大小、字體樣式、顏色等樣式。.animation-container 表示選擇具有 animation-container 類名的元素,設置了絕對定位和底部偏移量。.circle 表示選擇具有 circle 類名的元素,設置了圓圈的樣式,包括寬度、高度、背景顏色、邊框圓角、外邊距和動畫效果。
動畫效果使用了 @keyframes 關鍵字定義了一個名為 pulse 的關鍵幀動畫,通過改變透明度和縮放來實現圓圈的閃爍效果。.circle:nth-child(n) 選擇了第 n 個具有 circle 類名的元素,並設置了不同的動畫延遲時間,以實現圓圈的依次閃爍效果。
這段代碼的作用是創建一個帶有動畫效果的信息卡片組件,顯示一個標題為 "數據總和",數值為 "100" 的信息。信息卡片具有特定的樣式,包括背景顏色、邊框圓角和居中對齊等。同時,信息卡片底部有一組圓圈,通過動畫效果實現閃爍的效果。
需求實戰三
樣式展示
代碼展示
<template>
<div class="info-card">
<div class="info-title">
數據總和
</div>
<div class="info-value">
100
</div>
<div class="animation-container">
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
</div>
</div>
</template>
<script setup lang="ts"></script>
<style scoped>
.info-card {
width: 318px;
height: 200px;
background-color: rgba(23, 179, 163, 0.5);
backdrop-filter: blur(10px);
border-radius: 8px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: relative;
border: 1px solid rgba(255, 255, 255, 0.2);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.1) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.1) 50%, rgba(255, 255, 255, 0.1) 75%, transparent 75%, transparent);
background-size: 20px 20px;
}
.info-title {
font-size: 24px;
font-weight: bold;
color: #FFFFFF;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.info-value {
font-size: 48px;
font-weight: bold;
color: #FFFFFF;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.animation-container {
display: flex;
position: absolute;
bottom: 25px;
}
.circle {
width: 10px;
height: 10px;
background-color: #FFD700;
border-radius: 50%;
margin: 0 4px;
transform: scale(0);
animation: pulse 1.5s infinite cubic-bezier(0.215, 0.61, 0.355, 1) alternate;
}
.circle:nth-child(1) {
animation-delay: 0.1s;
}
.circle:nth-child(2) {
animation-delay: 0.2s;
}
.circle:nth-child(3) {
animation-delay: 0.3s;
}
.circle:nth-child(4) {
animation-delay: 0.4s;
}
.circle:nth-child(5) {
animation-delay: 0.5s;
}
.circle:nth-child(6) {
animation-delay: 0.6s;
}
@keyframes pulse {
0% {
opacity: 0;
transform: scale(0);
}
50% {
opacity: 1;
transform: scale(1);
}
100% {
opacity: 0;
transform: scale(0);
}
}
</style>
代碼解讀
這段代碼是一個Vue組件的模板部分,用於展示一個帶有動畫效果和背景模糊的信息卡片。具體解釋如下:
- <template> 標簽用於定義組件的模板部分。
- <div class="info-card"> 是一個具有 info-card 類名的 div 元素,表示信息卡片的容器。
- <div class="info-title"> 是一個具有 info-title 類名的 div 元素,表示信息卡片的標題。
- <div class="info-value"> 是一個具有 info-value 類名的 div 元素,表示信息卡片的數值。
- <div class="animation-container"> 是一個具有 animation-container 類名的 div 元素,用於容納動畫效果的圓圈。
- <div class="circle"> 是一個具有 circle 類名的 div 元素,表示一個圓圈。
接下來是 <script setup lang="ts"> 標簽,用於編寫組件的邏輯部分,這裡是空的,沒有任何代碼。
最後是 <style scoped> 標簽,用於定義組件的樣式。.info-card 表示選擇具有 info-card 類名的元素,設置了寬度、高度、背景顏色、背景模糊、邊框圓角、陰影和背景圖案等樣式,並使用了 Flex 佈局使內容垂直居中。.info-title 和 .info-value 分別表示選擇具有對應類名的元素,設置了字體大小、字體樣式、顏色和文字陰影等樣式。.animation-container 表示選擇具有 animation-container 類名的元素,設置了絕對定位和底部偏移量。.circle 表示選擇具有 circle 類名的元素,設置了圓圈的樣式,包括寬度、高度、背景顏色、邊框圓角、外邊距和動畫效果。
動畫效果使用了 @keyframes 關鍵字定義了一個名為 pulse 的關鍵幀動畫,通過改變透明度和縮放來實現圓圈的閃爍效果。.circle:nth-child(n) 選擇了第 n 個具有 circle 類名的元素,並設置了不同的動畫延遲時間,以實現圓圈的依次閃爍效果。
這段代碼的作用是創建一個帶有動畫效果和背景模糊的信息卡片組件,顯示一個標題為 "數據總和",數值為 "100" 的信息。信息卡片具有特定的樣式,包括背景顏色、背景模糊、邊框圓角、陰影和背景圖案等。同時,信息卡片底部有一組圓圈,通過動畫效果實現閃爍的效果。
需求實戰四
樣式展示
代碼展示
<template>
<div class="home-component">
<ARow style="padding:0 0 30px 0">
<div class="info-card">
<div class="info-title">
數據總和
</div>
<transition name="number-transition">
<div class="info-value" :class="{ init:init,changed: isNumberIncreased, decreased: isNumberDecreased }">
{{ animatedValue }}
</div>
</transition>
<div class="animation-container">
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
</div>
</div>
</ARow>
<ARow>
<ACol span="10">
<div class="button-container">
<a-button class="increase-button" type="primary" @click="addNumber">增加數值</a-button>
</div>
</ACol>
<ACol span="4">
</ACol>
<ACol span="10">
<div class="button-container">
<a-button class="decrease-button" type="primary" @click="minNumber">減少數值</a-button>
</div>
</ACol>
</ARow>
</div>
</template>
<script setup lang="ts">
import { ref, watch } from 'vue';
const value = ref(100);
const isNumberIncreased = ref(false);
const isNumberDecreased = ref(false);
const animatedValue = ref(value.value);
const init=ref(true)
const addNumber = () => {
const startValue = value.value;
const endValue = startValue + 10;
animateNumber(startValue, endValue);
value.value = endValue;
init.value=false;
isNumberDecreased.value = false;
isNumberIncreased.value = true;
};
const minNumber = () => {
const startValue = value.value;
const endValue = startValue - 10;
animateNumber(startValue, endValue);
value.value = endValue;
init.value=false;
isNumberIncreased.value = false;
isNumberDecreased.value = true;
};
const animateNumber = (startValue:any, endValue:any) => {
const duration = 1000; // 動畫持續時間,單位為毫秒
const frameRate = 10; // 每秒幀數
const totalFrames = duration / (1000 / frameRate);
const frameIncrement = (endValue - startValue) / totalFrames;
let currentFrame = 0;
const timer = setInterval(() => {
currentFrame++;
animatedValue.value = Math.round(startValue + frameIncrement * currentFrame);
if (currentFrame === totalFrames) {
clearInterval(timer);
}
}, 1000 / frameRate);
};
watch(value, () => {
animatedValue.value = value.value;
});
</script>
<style scoped>
.home-component {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.info-card {
width: 318px;
height: 200px;
background-color: rgba(23, 179, 163, 0.5);
backdrop-filter: blur(10px);
border-radius: 8px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: relative;
border: 1px solid rgba(255, 255, 255, 0.2);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
background-image: linear-gradient(
45deg,
rgba(255, 255, 255, 0.1) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.1) 50%,
rgba(255, 255, 255, 0.1) 75%,
transparent 75%,
transparent
);
background-size: 20px 20px;
}
.info-title {
font-size: 24px;
font-weight: bold;
color: #ffffff;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.info-value {
font-size: 48px;
font-weight: bold;
color: #ffffff;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.info-value.init {
color: #ffffff;
transform: scale(1.2);
}
.info-value.changed {
color: #13c40d;
transform: scale(1.2);
}
.info-value.decreased {
color: #eb5766;
transform: scale(1.2);
}
.animation-container {
display: flex;
position: absolute;
bottom: 25px;
}
.circle {
width: 10px;
height: 10px;
background-color: #ffd700;
border-radius: 50%;
margin: 0 4px;
transform: scale(0);
animation: pulse 1.5s infinite cubic-bezier(0.215, 0.61, 0.355, 1) alternate;
}
.circle:nth-child(1) {
animation-delay: 0.1s;
}
.circle:nth-child(2) {
animation-delay: 0.2s;
}
.circle:nth-child(3) {
animation-delay: 0.3s;
}
.circle:nth-child(4) {
animation-delay: 0.4s;
}
.circle:nth-child(5) {
animation-delay: 0.5s;
}
.circle:nth-child(6) {
animation-delay: 0.6s;
}
@keyframes pulse {
0% {
opacity: 0;
transform: scale(0);
}
50% {
opacity: 1;
transform: scale(1);
}
100% {
opacity: 0;
transform: scale(0);
}
}
.button-container {
display: flex;
justify-content: center;
padding: 30px 0;
animation: bounce 2s infinite;
animation-delay: 1s;
}
.increase-button,
.decrease-button {
font-size: 16px;
font-weight: bold;
text-transform: uppercase;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
border: none;
transform: scale(1.05) rotate(360deg);
transition: transform 1s;
border-radius: 5px;
}
.increase-button {
background-color: #38b2ac;
margin-right: 10px;
}
.decrease-button {
background-color: #eb5766;
margin-left: 10px;
}
.increase-button:hover,
.decrease-button:hover {
transform: scale(1.05);
box-shadow: 0 2px 15px rgba(0, 0, 0, 0.4);
}
</style>
代碼解讀
這段代碼是一個Vue組件的模板部分,用於展示一個帶有動畫效果和交互功能的信息卡片。具體解釋如下:
- <template> 標簽用於定義組件的模板部分。
- <div class="home-component"> 是一個具有 home-component 類名的 div 元素,表示整個組件的容器。
- <ARow> 和 <ACol> 是自定義的組件,用於佈局。<ARow> 表示一行,<ACol> 表示一列。
- <div class="info-card"> 是一個具有 info-card 類名的 div 元素,表示信息卡片的容器。
- <div class="info-title"> 是一個具有 info-title 類名的 div 元素,表示信息卡片的標題。
- <transition> 標簽用於添加過渡效果,name 屬性指定過渡效果的名稱。
- <div class="info-value"> 是一個具有 info-value 類名的 div 元素,表示信息卡片的數值。使用了動態綁定 :class 來根據條件添加不同的類名,實現數值變化時的樣式變化。
- {{ animatedValue }} 是一個插值表達式,用於顯示動態綁定的 animatedValue 變數的值。
- <div class="animation-container"> 是一個具有 animation-container 類名的 div 元素,用於容納動畫效果的圓圈。
- <div class="circle"> 是一個具有 circle 類名的 div 元素,表示一個圓圈。
接下來是 <script setup lang="ts"> 標簽,用於編寫組件的邏輯部分。通過 import 導入了 ref 和 watch 方法,用於創建響應式數據和監聽數據變化。定義了一些變數和方法,包括 value、isNumberIncreased、isNumberDecreased、animatedValue、init、addNumber、minNumber 和 animateNumber。addNumber 方法用於增加數值,minNumber 方法用於減少數值,animateNumber 方法用於實現數值變化的動畫效果。使用 watch 監聽 value 的變化,並更新 animatedValue 的值。
最後是 <style scoped> 標簽,用於定義組件的樣式。.home-component 表示選擇具有 home-component 類名的元素,設置了居中對齊等樣式。.info-card 表示選擇具有 info-card 類名的元素,設置了寬度、高度、背景顏色、背景模糊、邊框圓角、陰影和背景圖案等樣式。.info-title 和 .info-value 分別表示選擇具有對應類名的元素,設置了字體大小、字體樣式、顏色和文字陰影等樣式。.info-value.init、.info-value.changed 和 .info-value.decreased 分別表示根據條件添加的類名,用於實現數值變化時的樣式變化。.animation-container 表示選擇具有 animation-container 類名的元素,設置了絕對定位和底部偏移量。.circle 表示選擇具有 circle 類名的元素,設置了圓圈的樣式,包括寬度、高度、背景顏色、邊框圓角、外邊距和動畫效果。
動畫效果使用了 @keyframes 關鍵字定義了一個名為 pulse 的關鍵幀動畫,通過改變透明度和縮放來實現圓圈的閃爍效果。.circle:nth-child(n) 選擇了第 n 個具有 circle 類名的元素,並設置了不同的動畫延遲時間,以實現圓圈的依次閃爍效果。
這段代碼的作用是創建一個帶有動畫效果和交互功能的信息卡片組件。信息卡片顯示一個標題為 "數據總和",數值初始值為 "100",並根據用戶點擊增加或減少數值,同時顯示數值的變化動畫效果。信息卡片具有特定的樣式,包括背景顏色、背景模糊、邊框圓角、陰影和背景圖案等。同時,信息卡片底部有一組圓圈,通過動畫效果實現閃爍的效果。
在黑夜裡夢想著光,心中覆蓋悲傷,在悲傷里忍受孤獨,空守一絲溫暖。 我的淚水是無底深海,對你的愛已無言,相信無盡的力量,那是真愛永在。 我的信仰是無底深海,澎湃著心中火焰,燃燒無盡的力量,那是忠誠永在。