擊右上方紅色按鈕關注“web秀”,讓你真正秀起來
昨天再次收到"月球居民愛麗絲"的投稿(非常感謝"月球居民愛麗絲"),希望做一個冰淇淋加載動畫,原圖:
css3實現ae動畫冰激淋流動的遮罩效果
看到如此美麗的冰淇淋是否想吃了?哈哈,大冬天的,還是不要了。今天我們就用CSS來制作一個冰淇淋吧。
1、 拋開動畫部分,冰淇淋分為2部分,能吃的冰淇淋和下方的木棍(都是可以直接用樣式畫出的)
2、 動畫部分,細數有4種顏色,紅色、米色、藍色、橙色。
3、 冰淇淋左上方的高光效果
通過這樣的解析,你是不是也可以制作一個簡單冰淇淋了呢?
下面我們按步驟實現。
<div class="ice-cream"> <div class="body"></div> <div class="footer"></div> </div>
按照解析,我們把它也分成上下結構2部分,身體(冰淇淋)、腳(木棍)。
.ice-cream{ width: 50px; height: 120px; margin: 100px auto; } .body{ margin: 0 auto; width: 50px; height: 100px; border-radius: 30px 30px 10px 10px; background: red; } .footer{ width: 10px; height: 15px; margin: 0 auto; border-radius: 0 0 4px 4px; background: #a77b64; }
css3實現ae動畫冰激淋流動的遮罩效果
這個效果相信很多小伙伴都會實現,2部分都是通過border-radius圓角來改變形狀。這里就不做多的說明了。
同理,按解析,我們添加4種顏色到冰淇淋上面。
... <div class="body"> <div class="loading"> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> </div> </div>
添加不同顏色
.body{ position: relative; ... } ... .loading{ position: absolute; width: 200px; } .loading .line{ height: 40px; } .loading .line:nth-child(1){ background: #ff7632; } .loading .line:nth-child(2){ background: #46b0ff; } .loading .line:nth-child(3){ background: #fffce5; } .loading .line:nth-child(4){ background: red; }
css3實現ae動畫冰激淋流動的遮罩效果
發現把我們的整個冰淇淋都個蓋住了,這時只需要添加overflow: hidden;即可。
.body{ ... overflow: hidden; }
css3實現ae動畫冰激淋流動的遮罩效果
然后我們把顏色部分旋轉一個角度,并且使其動起來。
.loading{ position: absolute; width: 200px; top: -77px; left: -89px; transform: rotate(45deg); animation: move 2.5s linear infinite; } @keyframes move{ from { top: -77px; left: -89px; } to { top: 9px; left: -84px; } }
css3實現ae動畫冰激淋流動的遮罩效果
這時候你會發現怎么調整,動畫中間都會有斷層。
所以我的解決方案是,重新copy一份顏色,讓其可持續循環的。
<div class="loading"> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> </div> .loading{ position: absolute; top: -213px; left: -27px; width: 200px; transform: rotate(45deg); animation: move 2.5s linear infinite; } @keyframes move{ from { top: -213px; left: -27px; } to { top: -46px; left: -83px; } } .loading .line{ height: 40px; } .loading .line:nth-child(1), .loading .line:nth-child(5){ background: #ff7632; } .loading .line:nth-child(2), .loading .line:nth-child(6){ background: #46b0ff; } .loading .line:nth-child(3), .loading .line:nth-child(7){ background: #fffce5; } .loading .line:nth-child(4), .loading .line:nth-child(8){ background: red; }
這個就是在body上面添加一個圓弧。
大家應該都看過前面的CSS3動畫解析抖音 LOGO制作文章了,這里面有制作圓弧的示例。
.body:before{ position: absolute; content: ""; width: 25px; height: 25px; border: 5px solid #fff; border-right: 5px solid transparent; border-top: 5px solid transparent; border-left: 5px solid transparent; border-radius: 100%; top: 5px; left: 5px; transform: rotate(120deg); opacity: 0.7; z-index: 10; }
利用border畫出1/4的圓,就可以啦。
最終效果:
css3實現ae動畫冰激淋流動的遮罩效果
不知道大家有沒有get到每次開發的小經驗了?開發前先分析,分小步驟,完成各個功能點。
喜歡小編的點擊關注,了解更多知識!
源碼地址和源文件下載請點擊下方“了解更多”
家好! 歡迎來到本教程,我們將深入了解使用 HTML 畫布和 JavaScript 在代碼中創建有趣的氣泡的世界。 最好的部分? 我們將只使用一點 HTML 和所有 JavaScript,而不是 CSS 來實現所有這一切。
今天,我們要掌握以下幾個概念:
使用畫布上下文的 arc 方法創建圓。
利用 requestAnimationFrame 函數實現平滑的圓形動畫。
利用 JavaScript 類的強大功能來創建多個圓圈,而無需重復代碼。
向我們的圓圈添加描邊樣式和填充樣式以獲得 3D 氣泡效果。
你可以跟著我一起看,或者如果你想看源代碼,可以使用最終的codepen
首先,我們需要一個 HTML5 Canvas 元素。 Canvas 是創建形狀、圖像和圖形的強大元素。 這就是氣泡將產生的地方。 讓我們來設置一下 -
<canvas id="canvas"></canvas>
為了使用畫布做任何有意義的事情,我們需要訪問它的上下文。 Context 提供了在畫布上渲染對象和繪制形狀的接口。
讓我們訪問畫布及其上下文。
const canvas = document.getElementById('canvas');
const context = canvas.getContext('2d');
我們將設置畫布以使用整個窗口的高度和寬度 -
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
讓我們通過添加一些 css 為畫布提供一個漂亮的舒緩淺藍色背景。 這是我們要使用的唯一 CSS。 如果您愿意,也可以使用 JavaScript 來完成此操作。
#canvas {
background: #00b4ff;
}
讓我們進入有趣的部分。 我們將通過單擊畫布來創建氣泡。 為了實現這一點,我們首先創建一個點擊事件處理程序:
canvas.addEventListener('click', handleDrawCircle);
由于我們需要知道在畫布上單擊的位置,因此我們將在句柄 DrawCircle 函數中跟蹤它并使用事件的坐標 -
//We are adding x and y here because we will need it later.
let x, y
const handleDrawCircle = (event) => {
x = event.pageX;
y = event.pageY;
// Draw a bubble!
drawCircle(x, y);
};
為了創建圓圈,我們將利用畫布上下文中可用的 arc 方法。 Arc 方法接受 x 和 y - 圓心、半徑、起始角和結束角,對于我們來說,這將是 0 和 2* Math.PI,因為我們正在創建一個完整的圓。
const drawCircle = (x, y) => {
context.beginPath();
context.arc(x, y, 50, 0, 2 * Math.PI);
context.strokeStyle = 'white';
context.stroke();
};
現在我們有了圓圈,讓我們讓它們移動,因為……
GIF
請記住,當我們創建圓時,我們使用了 arc 方法,它接受 x 和 y 坐標 - 圓的中心。 如果我們快速移動圓的 x 和 y 坐標,就會給人一種圓在移動的印象。 讓我們試試吧!
//Define a speed by which to increment to the x and y coordinates
const dx = Math.random() * 3;
const dy = Math.random() * 7;//Increment the center of the circle with this speed
x = x + dx;
y = y - dy;
我們可以將其移至函數內 -
let x, y;
const move = () => {
const dx = Math.random() * 3;
const dy = Math.random() * 7; x = x + dx;
y = y - dy;
};
為了讓我們的圓圈無縫移動,我們將創建一個動畫函數并使用瀏覽器的 requestAnimationFrame 方法來創建一個移動的圓圈。
const animate = () => {
context.clearRect(0, 0, canvas.width, canvas.height);
move();
drawCircle(x,y); requestAnimationFrame(animate);
};//Don't forget to call animate at the bottom
animate();
現在我們已經創建了一個圓圈,是時候創建多個圓圈了!
但在我們創建多個圓圈之前,讓我們準備一下我們的代碼。為了避免重復我們的代碼,我們將使用類并引入 Particle 類。 粒子是我們動態藝術作品和動畫的構建塊。 每個氣泡都是一個粒子,具有自己的位置、大小、運動和顏色屬性。 讓我們定義一個 Particle 類來封裝這些屬性:
class Particle {
constructor(x = 0, y = 0) {}
draw() {
// Drawing the particle as a colored circle
// ...
} move() {
// Implementing particle movement
// ...
}
}
讓我們將一些已設置的常量移至 Particle 類 -
class Particle {
constructor(x = 0, y = 0) {
this.x = x;
this.y = y;
this.radius = Math.random() * 50;
this.dx = Math.random() * 3;
this.dy = Math.random() * 7;
}
draw() {
// Drawing the particle as a colored circle
// ...
} move() {
// Implementing particle movement
// ...
}
}
draw 方法將負責在畫布上渲染粒子。 我們已經在drawCircle中實現了這個功能,所以讓我們將它移動到我們的類中并將變量更新為類變量
class Particle {
constructor(x = 0, y = 0) {
this.x = x;
this.y = y;
this.radius = Math.random() * 50;
this.dx = Math.random() * 3;
this.dy = Math.random() * 7;
this.color = 'white';
}
draw() {
context.beginPath();
context.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);
context.strokeStyle = this.color;
context.stroke(); context.fillStyle = this.color;
context.fill();
} move() {}
}
同樣,讓我們在類中移動 move 函數 -
move() {
this.x = this.x + this.dx;
this.y = this.y - this.dy;
}
現在,我們需要確保在事件處理程序中調用 Particle 類。
const handleDrawCircle = (event) => {
const x = event.pageX;
const y = event.pageY;
const particle = new Particle(x, y);
};canvas.addEventListener('click', handleDrawCircle);
由于我們需要在 animate 函數中訪問該粒子,以便調用其 move 方法,因此我們將該粒子存儲在一個名為 molecularArray 的數組中。 當創建大量粒子時,這個數組也會很有幫助。 這是反映這一點的更新代碼 -
const particleArray = [];
const handleDrawCircle = (event) => {
const x = event.pageX;
const y = event.pageY; const particle = new Particle(x, y);
particleArray.push(particle);
};canvas.addEventListener('click', handleDrawCircle);
記得也要更新動畫功能 -
此時,您將在屏幕上看到這個粒子 -
驚人的! 現在,到了有趣的部分! 讓我們創建很多圓圈并設計它們的樣式,使它們看起來像氣泡。
為了創建大量氣泡,我們將使用 for 循環創建粒子并將它們添加到我們在此處創建的粒子數組中。
const handleDrawCircle = (event) => {
const x = event.pageX;
const y = event.pageY;
for (let i = 0; i < 50; i++) {
const particle = new Particle(x, y);
particleArray.push(particle);
}
};canvas.addEventListener('click', handleDrawCircle);
在動畫函數中,我們將通過清除畫布并在新位置重新繪制粒子來不斷更新畫布。 這會給人一種圓圈在移動的錯覺。
const animate = () => {
context.clearRect(0, 0, canvas.width, canvas.height);
particleArray.forEach((particle) => {
particle?.move();
particle?.draw();
}); requestAnimationFrame(animate);
};animate();
現在我們有了移動的氣泡,是時候給它們添加顏色,使它們看起來像氣泡了!
我們將通過向氣泡添加漸變填充來實現此目的。 這可以使用 context.createRadialGradient 方法來完成。
const gradient = context.createRadialGradient(
this.x,
this.y,
1,
this.x + 0.5,
this.y + 0.5,
this.radius
);
gradient.addColorStop(0.3, 'rgba(255, 255, 255, 0.3)');
gradient.addColorStop(0.95, '#e7feff');context.fillStyle = gradient;
恭喜! 您剛剛僅使用 HTML Canvas 和 JavaScript 創建了一些超級有趣的東西。 您已經學習了如何使用 arc 方法、利用 requestAnimationFrame、利用 JavaScript 類的強大功能以及使用漸變設計氣泡以實現 3D 氣泡效果。
請隨意嘗試顏色、速度和大小,使您的動畫真正獨一無二。
請隨意嘗試顏色、速度和大小,使您的動畫真正獨一無二。
我希望您在學習本教程時能像我在創建它時一樣獲得樂趣。 現在,輪到你進行實驗了。 我很想看看你是否嘗試過這個以及你創造了什么。 與我分享您的代碼鏈接,我很樂意查看。
角,是家居空間中最不起眼的角落。動輒數十萬的裝修費,我們往往沒有將其考慮進去。但小編發現,這些存在感極低,看似沒什么用處的小角落,一旦設計師較真起來,那叫一個狂拽酷炫吊炸天!
不信?那就跟張家口裝修公司小編一起看看這些一分一毫不浪費的轉角設計吧~
一、轉角柜
◆ L型轉角餐邊柜,鋪滿角落邊緣,用不起眼的占地打造出彩的收納效果。
◆ 不規則的墻角凸起處設計一個玄關柜,收納+隔斷一起完成,把戶型缺陷改造成優勢,這波操作才是真的666~
◆ 除了沿著轉角做柜子,也可以嘗試延長轉角線,用來做隔斷正好。
◆ 小巧的盆栽架,擺上幾盆漂亮的綠植,既可以讓角落不那么單調,還能增加美感,很適合客廳角落擺設。
二、轉角辦公室
隨著現代人生活節奏加快,SOHO戶型越來越受歡迎,如果空間布局局限性大,沒辦法大改動,那么改造個小型的角落辦公區也不錯呢。
◆ 利用轉角剩余空間做個舒適的弧形辦公區,比一般的長方形工作桌更實用~
◆ 原木搭嫩黃的角落辦公區,更適合當學生黨的學習區,桌上滿滿的儲放空間,讓學生黨的各種考試卷&三年模擬五年高考有了安放之處~
◆ 加上小黑板,角落也變得有設計感,乍一看,完全就是設計師的工作區啊!
三、梳妝臺
◆ 臥室角落空間不夠,做什么都尷尬?試試與飄窗柜做連接,一丁點落腳地就能做梳妝臺~
四、兒童活動區
◆ 把墻面粉飾一通,貼上可愛的卡通壁紙,擺上小帳篷等道具,自己也能給寶寶做一個活動區~
◆ 只要1㎡就能滿足寶寶的活動區,軟地毯進行分區,放上寶寶喜歡的玩偶和玩具收納柜足矣~
如果您已經籌備開始裝修了,選擇好的裝修公司才能放心裝修,訪問官網:http://zjk.zxdyw.com/專業的裝修知識幫您了解裝修,10000+套裝修效果圖供您參考。
裝修之前先算報價,復制打開這個鏈接三步就知道自家房子裝修需要多少錢:
http://zjk.zxdyw.com/m/zb/bj.html?utm_source=gkzjk1
*請認真填寫需求信息,我們會在24小時內與您取得聯系。