個被無限拉長的春節假期里,有一個群體絕對不能忽視。
他們天性活潑,有旺盛的精力,處在快速成長階段……
你坐得住,他們可不讓你坐得住。
全國家長都懂:娃不瘋,我先瘋。
雖然,看電視傷眼睛的道理誰都懂,但已經到了第二個14天,再不拿出動畫片來封印深獸,恐怕真的要瘋!
▲今年奧斯卡獲獎的最佳動畫短片《發之戀》
既然總歸要看的,不如看點真正的好片子!
時長合理,對眼睛有一定保護;沒有恐怖畫面,不會增加晚上哄睡的負擔;綠色環保,杜絕少兒不宜。
于是我們從歷屆20多部奧斯卡提名和獲獎的動畫短片中,選出了含金量最高的9部,推薦給大家!
這是一輛開往幼兒園的車,孩子們,上車!
*這些影片的在線觀看鏈接,我也都整理好了,都是網上能夠找到的相對高清的版本,復制鏈接用瀏覽器打開就行了。
關鍵詞 :親情 堅持
片長:7分鐘
獲獎:第92屆奧斯卡金像獎 最佳動畫短片
觀看地址:復制鏈接用瀏覽器打開
https://www.iqiyi.com/v_19rvqwgjds.html
這部短片算是在上周奧斯卡中爆冷奪得最佳動畫短片,故事很簡單,講的是一位爸爸第一次給女兒扎辮子的故事。
這是重要的一天,小女孩Zuri準備打扮美美的,可是一頭蓬松爆炸的頭發,卻難倒了她。
自己嘗試失敗后,決定向爸爸求助,這段與魔法怪獸拼死搏斗的畫面特別有趣,像極了爸爸們給女兒梳頭的樣子,相信很多爸爸會有共鳴感。
一番搏斗后,爸爸還是敗了,打算用帽子壓住頭發了事。最后,被媽媽的話鼓舞的爸爸,決定再次嘗試。
這一次,他們成功了!
畫面一轉到病房,媽媽因為生病治療,剃光了頭發。不過收到女兒送她的畫,決定勇敢面對。
短片沒有過多的隱喻和獵奇畫風,特別貼近生活,卻演繹出一個打動人心的故事。同時也傳達給我們一個信念:前路或許艱辛,但你終會到達,只要一點努力,加上滿滿的愛。
關鍵詞:成長 獨立 勇敢
片長:6分03秒
獲獎:第89屆奧斯卡金像獎 最佳動畫短片
觀看地址:復制鏈接用瀏覽器打開
https://v.qq.com/x/cover/mzc00200k549l9q/l3044jlpfzr.html
這部動畫,我一度以為是紀錄片,特效真的太逼真,每一幅畫面都美的可以截圖當桌面。
短短6分鐘,無對白,無字幕,一個簡單的故事,卻描繪出一個關于成長的真諦。
一只小鷸張大嘴巴等媽媽喂食,媽媽卻一直呼喚它來海邊自己覓食。
不曾想還沒吃到東西,就被浪潮打濕,回到家里瑟瑟發抖,拒絕再去。媽媽卻沒有因此心軟,而是一再的鼓勵它。
再次出海的小鷸遇上了小寄居蟹,學著它們躲進沙子躲避浪潮,卻發現了完全不一樣的景觀,也打開了新世界大門。
最后看到小鷸不再害怕,肆意在海灘上覓食的樣子,真的會忍俊不禁。
小鷸的成長就像我們每個人的的縮影,父母適時的放手,才能讓孩子更好地成長。親人的鼓勵、好友的扶持,終會讓你戰勝恐懼,成為更好的自己。
必須說一下,小鷸真的萌翻了!老母親和小寶貝雙雙被擊中!
關鍵詞:母愛 家庭 放手
片長:8分鐘
獲獎:第91屆奧斯卡金像獎 最佳動畫短片
觀看地址:復制鏈接用瀏覽器打開
https://www.iqiyi.com/v_19rqtkymnw.html
這是一部中國風的動畫,短短8分鐘就能讓人了解到中國人的脾氣、習慣以及中國式家庭的親情關系。
故事很簡單,一個包子有了生命,這位媽媽把它當成孩子一樣撫養長大,包寶寶漸漸長大,渴望獨立,有自己的生活,但她卻無法接受。
最終矛盾爆發,媽媽一口把它吞下了。看到這里時,我嚇了一大跳,還好,故事并沒有結束,原來這一切都是媽媽的噩夢。
其實想想,這是我們很多人經歷過的故事。父母對孩子過分保護、不愿放手的心態,這種以愛之名養育子女,卻也可能將子女吞噬。
這部動畫孩子看會覺得很可愛軟萌,但我更想推薦給爸爸媽媽們看,在養育孩子的同時,給與孩子足夠的空間和自由,不正是我們新一代爸媽該學習的嗎?
關鍵詞:勇氣 責任 守護
片長:8分鐘
獲獎:第91屆奧斯卡最佳動畫短片(提名)
觀看地址:復制鏈接用瀏覽器打開
https://www.iqiyi.com/v_19rqtkymnw.html
這是一部治愈系動畫短片,畫風可愛,歷險的故事很精彩,出鏡了非常多小動物,很適合寶貝看。
短片開始就是驚心動魄,Bilby為了食物一路奔跑逃竄,一下就感覺到它生存環境的惡劣。
找食物的途中,Bilby遇到了一直呆萌的幼鳥,本想一走了之,卻心生憐憫,帶著它開始逃亡之路。隨之是接踵而來的各種危險,眼鏡蛇、蝎子、食人魚、鱷魚......
最終逃到了一處懸崖之上,結果又被老鷹抓走,Bilby再起鼓起勇氣去解救它。最后,幼鳥長大了,兩只動物成了好朋友,相互陪伴。
正因為一開始就看到Bilby生存的惡劣,它之后的善良舉動才更顯得珍貴。我們人也一樣,雖然平凡弱小,可當我們有了想要守護的東西,就會變得勇敢無懼。父母與孩子,何嘗不是如此呢?
關鍵詞:友情 治愈 成長
片長:9分鐘
獲獎:第92屆奧斯卡金像獎 最佳動畫短片(提名)
觀看地址:復制鏈接用瀏覽器打開
https://v.qq.com/x/cover/mzc00200k549l9q/l3044jlpfzr.html
特別暖心的一部動畫短片,講述一只流浪貓Kit與斗牛犬Bull從生疏防備到親密無間的故事。
雖然是二維動畫,卻體現了皮克斯一貫的高水準。細節的刻畫特別棒,尤其是小貓的動作、神態,捕捉的特別好。
一點聲響就被嚇到,將Kit是一只流浪貓,生性膽小,極其沒有安全感的狀態展示出來。
而bull呢,看起來有人照顧,其實一直在遭受主人的虐待。
兩只小動物,從充斥著敵意,相互試探,到后來發現彼此內心的善意。這段故事,特別適合孩子從中領會什么是友誼?
▲雖然很恐懼,仍會幫Bull舔傷口給它安慰。
更讓我感動的是,它們在遭受了那么多傷害后,仍選擇對世界抱以善良的心。最終,它們也“被溫柔以待”,找到了好主人。
我想這也是我們想讓孩子明白的:只要心懷善念,雖然歷經苦難,世界終將還你愛與溫暖。
關鍵詞:人際關系 幽默
片長:3分鐘
獲獎:第74屆奧斯卡金像獎 最佳動畫短片
觀看地址:復制鏈接用瀏覽器打開
https://www.iqiyi.com/w_19s0kqcg75.html
皮克斯出品,延續了一貫輕松搞笑的風格。
一群小鳥聚在電線上嘰嘰喳喳吵個不停,不速之客大鳥的到來,打破了原來的平衡。
小鳥們突然團結起來一致對外,打算把大鳥排擠出去,可成功在即之時,意外發生了。
小鳥們因為慣性被彈到天空中,羽毛全部脫落得光禿禿,只好躲到大鳥身后了。
短片只有3分鐘,卻像是一出幽默的小品。一群小鳥和一只大鳥斗智斗勇,動作和表情都非常夸張,非常適合小齡寶貝看。
大人可以感受影片背后映射的某些社會現象,孩子比較難理解,但可以問孩子一些簡單的問題,比如小鳥們的行為是對是錯呢?怎樣對待大鳥更好呢?
關鍵詞:閱讀 想象力
片長:15分鐘
獲獎:2012年奧斯卡金像獎最佳動畫短片獎
觀看地址:復制鏈接用瀏覽器打開
https://www.iqiyi.com/v_19rrh6izps.html#curid=226621500_0d52db7c805aee21d30fc41fc2ebf428
如果要提到在繪本界最有名的一部動畫短片,那一定非《神奇飛書》莫屬,因為這是一部關于“書”的動畫,也是一部獻給愛書者的短片。
在一個平靜的小鎮,一個男子正坐在陽臺上閱讀,他的身邊堆滿了書。突然狂風大作,所有的東西就連書上的文字都被吹走。
當男子四處游蕩時,他跟著一本書來到了一棟滿是書的房子,從此留在這里,與書相伴。
短片里藏著很多細節,可以和孩子多看幾遍,一起發現。
富有想象力,無論是被風吹起的字幕,還是躺在巨大的書籍睡覺,最讓孩子驚喜,還是里面各種飛翔的書,每一本書都有生命。
有段“救活”一本書的情節,用各種方法搶救,但唯一的方法,是打開它,閱讀它。
所以,告訴孩子們,去閱讀吧!只有書本傳遞的力量與快樂,才是永恒的,才能讓原本黑白的世界變成彩色。
關鍵詞:陪伴 信任 包容
片長:5分49秒
獲獎:第82屆奧斯卡入圍最佳動畫提名的附贈短片
觀看地址:復制鏈接用瀏覽器打開
https://v.qq.com/x/page/o0642zh1spq.html
這是皮克斯2009《飛屋環游記》的加映短片,畫面呆萌可愛,動畫人物的表情非常生動,是寶貝們會愛的款!
講述了一個很奇幻的故事,“孩子”是由天空中有生命的云朵們創造的,由送子鸛將他們送到不同的家。
有一朵烏云Gus,和其他云不同,它制造的孩子都是那些攻擊性很強的孩子,比如,牙齒鋒利的鱷魚寶寶、有著硬角的山羊寶寶、渾身是刺的刺猬寶寶...看的時候,還真有點心疼送子鸛Peck。
就在我們以為遍體鱗傷的Peck受不了,選擇了離開,卻沒想到它只是去穿了一套防護套裝,繼續回到Gus身邊,這一幕真的超暖心。
Gus和Peck之間的關系,很讓人感動。每個人或許都會有與世界格格不入的棱角,就像這些制造出來的“危險”??墒橇粼谀闵磉叺娜?,不管是朋友家人,還是愛人,總會給你信任和包容。
總之,這真的是一部可愛有趣又令人動容的動畫。
關鍵詞:付出 陪伴 克制
片長:6分鐘
獲獎:第87屆奧斯卡金像獎 最佳動畫短片
觀看地址:復制鏈接用瀏覽器打開
https://v.qq.com/x/cover/76wjn5jwry03mhu/w0015u0o190.html?ptag=360kan.cartoon.free
通過小狗溫斯頓的視角,來講述了男主人的愛情故事。
整片的主線可是溫斯頓的食物,從最初狗糧,到后來的牛排、炸肉餅、煎蛋...溫斯頓的可謂是登上了狗生巔峰??!和男主人一塊兒度過了一段天堂般的美食歲月。
▲看它吃東西我都要饞了
直到男主人邂逅了生命中的另一半,溫斯頓的伙食每況愈下,直到男主人失戀了...
令人意想不到的是,竟然是溫斯頓拯救了男主人的愛情,而它最后又是怎樣再次享受上各種美食的,看完你肯定會笑出來。
且不說一只狗的“美食盛宴”里吃出了愛情和人生,光是整部短片展現的歡樂,就值得和孩子一起看一次,相信最后你也會喜歡上這只貪吃的小狗!
愿你們度過一段特別的親子時光~
當然啦,給寶貝看動畫也要注意控制時間。
美國兒科學會建議:18個月以下的嬰幼兒最好不要看電視;18個月至2歲的孩子每天的屏幕時間也不能超過1小時,爸爸媽媽們一定要嚴格執行哦。
最后,也想和大家聊一下動畫這種藝術創作。
李安曾說過:一部好的電影,改變一個人看待世界的方式。
好的動畫,同樣如此。它超越想象的邊界,在潛移默化中,不僅能讓人看到豐富多彩的世界,更有著催人向上的作用。
那好的動畫又是怎樣的呢?我想除了蘊含童趣、詼諧幽默又不乏寫實,更重要的是,它一定是由愛和真誠善良所組成。
在這些動畫中,始終不會離開“愛”的主題,這是我們所需要的,也是想我們想教給孩子的:不管在任何時刻,都要保持愛的力量!
<canvas> 是HTML中的一個元素,它可被用來通過 JavaScript(Canvas API 或 WebGL API)繪制圖形及圖形動畫。
Canvas API 提供了一個通過 JavaScript 和 HTML 的 <canvas> 元素來繪制圖形的方式。它可以用于動畫、游戲畫面、數據可視化、圖片編輯以及實時視頻處理等方面。
<canvas>標簽本身沒有繪圖能力,它僅僅是圖形的容器。在HTML,一般通過Javascript語言來完成實際的操作。
本文通過Javascript操作Canvas制作一個簡單的顯示當前時間的動畫時鐘,了解和學習簡單的canvas用法,僅以拋磚引玉。
首先創建一個HTML文件,為了方便管理,使用一個div標簽包裹兩個canvas標簽,并加上一些簡單的css樣式。
<!doctype html>
<html lang="zh-cn">
<head><title>Canvas繪制動畫時鐘</title>
<style>
html,body{margin:0;padding:0}
#clockWrap {
position: relative;
}
canvas {
position: absolute;
}
#clock-ui {
z-index: 2;
}
#clock-plate {
z-index: 1;
}
</style>
</head>
<body>
<div id="clockWrap">
<canvas id="clock-plate"></canvas>
<canvas id="clock-ui"></canvas>
</div>
<script></script>
</body></html>
本示例中使用了兩個canvas標簽(為什么使用兩個,一個不是更簡單嗎?),一個用于繪制鐘面,一個根據當前時間實時顯示和更新時針、分針和秒針的動態指向。好了,話不多說,開干。
一個簡單的時鐘,可以分為鐘面上的刻度和指針。其中刻度和12個數字是固定的,我們可以將它們繪制在當作背景的canvas上(示例中id為clock-plate的canvas)。
(1)要使用canvas,首先必須通過容器獲取渲染上下文:
var $=function(id){return document.querySelector(id);}//這個函數只是為了方便獲取dom元素
const canvasbg=$("#clock-plate"),
canvas=$("#clock-ui"),
ctx=canvasbg.getContext("2d"),//背景容器上下文
ctxUI=canvas.getContext("2d");//指針容器上下文,后面代碼要用
//定義畫布寬度和高度,時鐘圓直徑,并設置畫布大小
const oW=1000,oH=800,cW=400,r=cW/2,oX=oW/2,oY=oH/2;
canvas.width=oW;
canvas.height=oH;
canvasbg.width=oW;
canvasbg.height=oH;
(2)畫鐘的邊框,為了好看,這里畫兩個圈:
//畫出時鐘外圓框
ctx.lineWidth=12;
ctx.beginPath();
ctx.arc(oX, oY, r+14, 0, 2 * Math.PI);
ctx.stroke();
ctx.closePath();
ctx.lineWidth=8;
//畫出時鐘內圓框(刻度圈)
ctx.beginPath();
ctx.arc(oX, oY, r, 0, 2 * Math.PI);
ctx.stroke();
ctx.closePath();
ctx.beginPath();
邊框效果圖
(3)繪制刻度線和數字,可以利用三角函數計算出每個刻度的坐標:
利用三角函數計算刻度線的坐標位置
鐘面上有12個大格,從正上方12開始,它們的度數分別是270,300,330,0,30,60,90,120,150,180,210,240。然后利用JS的Math.sin和Math.cos分別計算出各大格的坐標。注意:js中Math.sin()和Math.cos()的參數不是角度數是弧度。可以使用Math.PI/180*角度來轉化,比如將30度轉換成弧度=Math.PI/180*30
//繪制鐘表中心點
ctx.beginPath();
ctx.arc(oX, oY, 8, 0, 2 * Math.PI);//圓心
ctx.fill();
ctx.closePath();
//設置刻度線粗細度
ctx.lineWidth=3;
//設置鐘面12個數字的字體、大小和對齊方式
ctx.font="30px serif";
ctx.textAlign="center";
ctx.textBaseline="middle";
var kdx,kdy;
//繪制12個大刻度和12個數字
//為方便計算,先定義了0-11這12個刻度對應的度數,也可以直接定義對應的弧度。
const hd=Math.PI/180,degr=[270,300,330,0,30,60,90,120,150,180,210,240];
for(var i=0;i<12;i++){
kdx=oX+Math.cos(hd*degr[i])*(r-3);
kdy=oY+Math.sin(hd*degr[i])*(r-3);
ctx.beginPath();
ctx.arc(kdx, kdy, 6, 0, 2 * Math.PI);//畫圓形大刻度
ctx.fill();
//繪制刻度對應的數字
ctx.strokeText(i==0? 12 : i,oX+Math.cos(hd*degr[i])*(r-24),oY+Math.sin(hd*degr[i])*(r-24));
ctx.closePath();
}
//繪制小刻度
ctx.lineWidth=2;
for(var i=0;i<60;i++){
if(i % 5==0) continue;//跳過與刻度重疊的刻度
x0=Math.cos(hd*i*6);
y0=Math.sin(hd*i*6);
ctx.beginPath();
ctx.moveTo(oX+x0*(r-10), oY+y0*(r-10));
ctx.lineTo(oX+x0*r, oY+y0*r); //畫短刻度線
ctx.stroke();
ctx.closePath();
}
效果如圖:
鐘面效果圖
(4)根據當前時間繪制指針
習慣上,時針粗短,分針略粗而長,秒針細長。為加大區別,示例中秒針細長并且繪制成紅色。
function drawHp(i){//繪制時針
const x0=Math.cos(hd*i*30),y0=Math.sin(hd*i*30);
drawPointer(oX,oY,oX+x0*(r-90),oY+y0*(r-90),10,"#000000");
}
function drawMp(i){//繪制分針
const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
drawPointer(oX,oY,oX+x0*(r-60),oY+y0*(r-60),5,"#000000");
}
function drawSp(i){//繪制秒針
const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
drawPointer(oX,oY,oX+x0*(r-20),oY+y0*(r-20),2,"#FF0000");
}
//抽取出繪制三種指針時共同的部分,注意指針繪制在渲染上下文ctxUI中
function drawPointer(ox,oy,tx,ty,width,color){
ctxUI.strokeStyle=color;
ctxUI.lineCap="round";
ctxUI.lineWidth=width;
ctxUI.beginPath();
ctxUI.moveTo(ox, oy);
ctxUI.lineTo(tx,ty);
ctxUI.stroke();
ctxUI.closePath();
}
現在已經有了繪制三種指針的方法,參數是當前時間的時、分和秒,將根據它們的值確定指針的坐標。不過,因為使用的是默認的convas坐標體系,0值實際指向3的位置,需要小小的修正一下。
window.requestAnimationFrame(function fn(){
var d=new Date();
ctxUI.clearRect(0,0,oW,oH);
//度數從0開始,而0在3刻度(15分/秒位置),修正為全值減15,如果小于0則修正回來
var hour=d.getHours(),minute=d.getMinutes()-15,second=d.getSeconds()-15;
hour=hour>11? hour-15 : hour-3;
drawHp(hour>=0? hour : 12+hour);
drawMp(minute>=0? minute : 60+minute);
drawSp(second>=0? second : 60+second);
window.requestAnimationFrame(fn);
});
接下來,調用window.requestAnimationFrame,在其中繪制并更新指標的位置??纯葱Ч绾危?/p>
指針繪制情況與實際時間相符
貌似效果有了,截圖時電腦上的時間是10時17分,指針繪制上,時針指向10時,分針指向17。嗯,感覺有點別扭?對了,時針和分針怎么是端端正正地指向它們的整時整分刻度上呢?實際鐘表上時針和分針是展示動態進度的,此時時針應該越過10時的位置才對。沒關系,我們在繪制時針和分針時別點東西,讓它的角度值加上分針和秒針的值試試。
//修改后的繪制三種指針的方法
function drawHp(i,f,m){//繪制時針,參數:時,分,秒
const x0=Math.cos(hd*(i+(f/60)+(m/600))*30),y0=Math.sin(hd*(i+(f/60)+(m/600))*30);
drawPointer(oX,oY,oX+x0*(r-90),oY+y0*(r-90),10,"#000000");
}
function drawMp(i,f){//繪制分針,參數,分,秒
const x0=Math.cos(hd*(i+(f/60))*6),y0=Math.sin(hd*(i+(f/60))*6);
drawPointer(oX,oY,oX+x0*(r-60),oY+y0*(r-60),5,"#000000");
}
function drawSp(i){//繪制秒針
const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
drawPointer(oX,oY,oX+x0*(r-20),oY+y0*(r-20),2,"#FF0000");
}
再來看看效果,嗯,立竿見影呀:
指針指向更合理了
到此為止,canvas繪制一個簡易時鐘就完成了。下面繼續優化一下。剛才使用requestAnimationFrame方法即時更新繪制情況。這個方法與刷新率有關,看看mdn上面怎么說的:
window.requestAnimationFrame() 方法會告訴瀏覽器你希望執行一個動畫。它要求瀏覽器在下一次重繪之前,調用用戶提供的回調函數。
對回調函數的調用頻率通常與顯示器的刷新率相匹配。雖然 75hz、120hz 和 144hz 也被廣泛使用,但是最常見的刷新率還是 60hz(每秒 60 個周期/幀)。為了提高性能和電池壽命,大多數瀏覽器都會暫停在后臺選項卡或者隱藏的 <iframe> 中運行的 requestAnimationFrame()。
本示例中,更新指針的位置并不需要很高的刷新頻率,可以通過節流進行一下優化:
var fps=5, fpsInterval=1000 / fps,lastTime=new Date().getTime(); //記錄上次執行的時間
function runStep() {
requestAnimationFrame(runStep);
var d=new Date(),now=d.getTime()
var elapsed=now - lastTime;
if (elapsed > fpsInterval) {
ctxUI.clearRect(0,0,oW,oH);
lastTime=now - (elapsed % fpsInterval);
//度數從0開始,而0在3刻度(15分/秒位置),修正為全值-15,如果小于0則用60減回
var hour=d.getHours(),minute=d.getMinutes()-15,second=d.getSeconds()-15;//console.log(d.getSeconds(),second);
hour=hour>11? hour-15 : hour-3;
drawHp(hour>=0? hour : 12+hour,minute+15,second+15);
drawMp(minute>=0? minute : 60+minute,second+15);
drawSp(second>=0? second : 60+second);
}
}
runStep();
當然,實現時鐘的方法是很多,比如可以使用畫布的旋轉(rotate方法)來實現指針的動態轉動等等。
完整HTML+JS源碼:
現代網頁設計中,動畫和過渡是提升用戶體驗的重要手段。通過使用 CSS,我們可以在不影響頁面性能的前提下,實現平滑和吸引人的視覺效果。本文將介紹 CSS 動畫和過渡的基礎知識,并通過幾個例子展示如何在你的網站中應用它們。
CSS 過渡允許你在 CSS 屬性值之間創建平滑的動畫效果。當一個元素的屬性值改變時,過渡效果會在一定時間內平滑地過渡到新的屬性值。
transition: property duration timing-function delay;
img:hover {
transform: scale(1.2);
transition: transform 0.3s ease-in-out;
}
這個例子中,當鼠標懸停在圖片上時,圖片會在0.3秒內放大到原來的1.2倍大小,過渡效果為ease-in-out。
CSS 動畫提供了更強大的控制,允許你創建復雜的動畫序列,通過定義關鍵幀(keyframes)來控制動畫的中間狀態。
@keyframes animation-name {
from {
/* 初始狀態 */
}
to {
/* 結束狀態 */
}
}
或者使用百分比來定義多個關鍵幀:
@keyframes animation-name {
0% { /* 初始狀態 */ }
50% { /* 中間狀態 */ }
100% { /* 結束狀態 */ }
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.icon-spin {
animation: spin 2s linear infinite;
}
這個例子創建了一個名為spin的動畫,使得圖標無限期地旋轉。
接下來,我們將通過幾個實戰例子來展示 CSS 動畫和過渡的具體應用。
.button {
position: relative;
overflow: hidden;
transition: background-color 0.3s;
}
.button:after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 5px;
height: 5px;
background: rgba(255, 255, 255, 0.7);
opacity: 0;
border-radius: 100%;
transform: scale(1, 1) translate(-50%);
transform-origin: 50% 50%;
}
.button:active:after {
width: 300px;
height: 300px;
opacity: 1;
transition: width 0.5s, height 0.5s, opacity 0s 0.5s;
}
在這個例子中,當按鈕被點擊時,會產生一個波紋效果,模擬水波紋擴散。
.fade-in {
animation: fadeIn 1s ease-in-out;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.fade-out {
animation: fadeOut 1s ease-in-out;
}
@keyframes fadeOut {
from { opacity: 1; }
to { opacity: 0; }
}
這個例子中定義了兩個動畫,一個用于元素的淡入,另一個用于元素的淡出。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS Animation and Transition Example</title>
<style>
body {
font-family: 'Arial', sans-serif;
margin: 0;
padding: 0;
background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
background-size: 400% 400%;
animation: gradientBG 15s ease infinite;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
min-height: 100vh;
}
@keyframes gradientBG {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.logo {
font-size: 2em;
color: #007bff;
margin-bottom: 20px;
animation: spin 3s linear infinite;
}
.scrolling-text {
margin: 20px 0;
background-color: #333;
color: #fff;
padding: 10px;
white-space: nowrap;
overflow: hidden;
position: relative;
}
.scrolling-text p {
position: absolute;
width: 100%;
height: 100%;
margin: 0;
line-height: 50px;
text-align: center;
/* Starting position */
transform: translateX(100%);
/* Apply animation to this element */
animation: scroll-text 10s linear infinite;
}
@keyframes scroll-text {
0% { transform: translateX(100%); }
100% { transform: translateX(-100%); }
}
.interactive-card {
background-color: #fff;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
padding: 20px;
margin: 20px;
border-radius: 10px;
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.interactive-card:hover {
transform: translateY(-10px);
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
}
.color-block {
width: 100px;
height: 100px;
background-color: #17a2b8;
margin: 20px;
border-radius: 50%;
transition: background-color 0.5s ease, transform 0.5s ease;
}
.color-block:hover {
background-color: #28a745;
transform: rotate(180deg);
}
</style>
</head>
<body>
<div class="logo">
<i class="fas fa-sync-alt"></i> Animated Logo
</div>
<div class="scrolling-text">
<p>This text scrolls infinitely. Pay attention to how it moves smoothly from right to left.</p>
</div>
<div class="interactive-card">
<h3>Interactive Card</h3>
<p>Hover over this card to see it move. It's a simple yet effective way to add interactivity to your design.</p>
</div>
<div class="color-block"></div>
</body>
</html>
CSS 動畫和過渡是前端開發者的強大工具,它們可以在不犧牲性能的情況下為用戶提供流暢、引人注目的界面交互。通過掌握這些技術,你可以創造出更加動態和生動的網頁體驗。記住,動畫應該用來增強用戶體驗,而不是分散用戶的注意力,適量而恰當地使用動畫效果是關鍵。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。