欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

html5+css3之動(dòng)畫在webapp中的應(yīng)用

  發(fā)布時(shí)間:2014-11-21 10:31:36   作者:佚名   我要評論
本文主要講訴了HTML5&CSS3在WEBAPP中的應(yīng)用,webapp模式的網(wǎng)站追求的就是一個(gè)體驗(yàn),而體驗(yàn)優(yōu)化的一個(gè)重點(diǎn)便是動(dòng)畫,可以說動(dòng)畫是webapp的一個(gè)亮點(diǎn),今天我們就來談?wù)剟?dòng)畫
動(dòng)畫在webapp的現(xiàn)狀

webapp模式的網(wǎng)站追求的就是一個(gè)體驗(yàn),是HTML5&CSS3浪潮下的產(chǎn)物,拋開體驗(yàn)不說,webapp模式門檻比較高;

而體驗(yàn)優(yōu)化的一個(gè)重點(diǎn)便是動(dòng)畫,可以說動(dòng)畫是webapp的一個(gè)亮點(diǎn)。但也是一個(gè)難點(diǎn),一個(gè)痛點(diǎn),主要原因是:移動(dòng)端手機(jī)的碎片化嚴(yán)重。

設(shè)備、型號(hào)、版本、分辨率等差異導(dǎo)致移動(dòng)端需要考慮的主流情況達(dá)10多種,而Hybrid帶來的webview可以讓情況更加糟糕

所以說,近兩年想在移動(dòng)端大范圍的使用動(dòng)畫,或者使用webapp模式都對團(tuán)隊(duì)的能力提出了要求,原因是:

① 單頁對變量污染更加敏感

這個(gè)變量污染包括js變量污染,css變量污染,雖然js可采用AMD模塊消除主要問題,但css的污染卻很難避免,有時(shí)候更甚于js

web Component是一個(gè)解決方案,但還不敢大范圍使用,因?yàn)橐淮蜺I的改變會(huì)導(dǎo)致各個(gè)業(yè)務(wù)團(tuán)隊(duì)改變,這個(gè)代價(jià)沒有顛覆性的優(yōu)勢,得不償失。

② heap值攀升

如果view的管理沒有一個(gè)有效的銷毀機(jī)制,那么webapp模式的網(wǎng)站不可避免的會(huì)消耗更多的內(nèi)存,甚至降低體驗(yàn),費(fèi)力不討好

③ 手機(jī)爛,CPU爛,國產(chǎn)瀏覽器多而爛,私自調(diào)整webkit內(nèi)核而引發(fā)的問題比比皆是,奇葩瀏覽器什么的就不提了

所以動(dòng)畫在webapp或者說在移動(dòng)端的使用有其場景,他適用于小范圍的動(dòng)畫,適用于view內(nèi)級別的動(dòng)畫,比如彈出層的動(dòng)畫,細(xì)節(jié)處的動(dòng)畫

不適用于頁面級別的切換,比如整個(gè)view的切換(我們看到的native中的過場動(dòng)畫),view級別動(dòng)畫的痛點(diǎn)是:手機(jī)碎片化

而view級別動(dòng)畫的難點(diǎn)是:

① view級別的動(dòng)畫不能預(yù)料dom樹的大小,大dom樹的動(dòng)畫cpu吃不消

② 過場動(dòng)畫不能共用window.scollTop,各個(gè)View需要維護(hù)自己的滾動(dòng)條,而區(qū)域滾動(dòng)是移動(dòng)端另一個(gè)痛點(diǎn)

以上是移動(dòng)端的現(xiàn)狀,技術(shù)雖好,有其場景??梢栽诟叨藱C(jī)上使用全局性的動(dòng)畫,但是框架層面一定要提供開關(guān)機(jī)制,低端機(jī)卡幀經(jīng)常發(fā)生,保證低端機(jī)的基本功能

接下來介紹一下CSS3的動(dòng)畫......

CSS3的動(dòng)畫

transition

復(fù)制代碼
代碼如下:

PS:當(dāng)然,上面四個(gè)屬性可以像border一樣寫到一堆


復(fù)制代碼
代碼如下:

.demo {
transition: border 2s ease 2s;
}

這段代碼就是告訴瀏覽器每當(dāng)border發(fā)生變化時(shí),請?jiān)趦擅牒笥|發(fā),并且在兩秒內(nèi)完成

這里舉一個(gè)典型的小例子做說明:


復(fù)制代碼
代碼如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Blade Demo</title>
<style type="text/css">
* { margin: 0 0; padding: 0 0; }
h1 { font-size: 16px; font-family: "Helvetica Neue", Helvetica, STHeiTi, Arial, sans-serif;}
.cm-header { top: 0; height: 44px; line-height: 44px; text-align: center; background-color: #099fde; color: #fff; z-index: 960; }
.title::after { content: ""; display: inline-block; vertical-align: middle; width: 6px; height: 6px; border-left: 2px solid #fff; border-bottom: 2px solid #fff; display: inline-block; margin-left: 5px; vertical-align: middle; position: relative; top: -4px; -webkit-transition: all 0.3s ease-in-out; }
.up::after { -webkit-transform: rotate(135deg); top: 1px; }
.down::after { -webkit-transform: rotate(-45deg); top: -4px; }
</style>
</head>
<body>
<header class="cm-header">
<h1 class="title up" id="title">
點(diǎn)擊我</h1>
</header>
<script type="text/javascript">
var el = $('#title');
el.on('click', function () {
if (el.hasClass('up')) {
el.removeClass('up');
el.addClass('down');
} else if (el.hasClass('down')) {
el.removeClass('down');
el.addClass('up');
}
});
</script>
</body>
</html>

簡單的動(dòng)畫使用transition,復(fù)雜的動(dòng)畫便要使用animation了;或者說需要從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的話,最好使用animation


復(fù)制代碼
代碼如下:

animation
animation-name 對于keyframe的名稱
animation-duration 動(dòng)畫花費(fèi)時(shí)間
animation-timing-function 動(dòng)畫曲線
animation-delay 延遲多少毫秒a執(zhí)行
animation-iteration-count 執(zhí)行次數(shù)
animation-direction 是否反方向播放

我們一般使用前四個(gè)參數(shù),這里的使用需要先創(chuàng)建keyframe規(guī)則,這里先來一個(gè)簡單的例子:


復(fù)制代碼
代碼如下:

<html>
<head>
<meta charset="utf-8" />
<title>Blade Demo</title>
<style type="text/css">
@-webkit-keyframes demoFrame {
from { left: 0; }
to { left: 100px; }
}
div { width: 100px; top: 100px; height: 100px; background: gray; position: absolute; }
.demo { -webkit-animation: demoFrame 1s ; }
</style>
<script id="others_zepto_10rc1" type="text/javascript" class="library" src="/js/sandbox/other/zepto.min.js"></script>
</head>
<body>
<div id="demo">
</div>
<input type="button" value="點(diǎn)擊我開始動(dòng)畫" id="btn">
<script>
var el = $('#demo');
var btn = $('#btn');
el.on('webkitAnimationEnd', function () {
el.removeClass('demo');
});
btn.on('click', function() {
el.addClass('demo');
});
</script>
</body>
</html>

每次執(zhí)行了動(dòng)畫邏輯后需要移除class達(dá)到重置效果,animationEnd便是對應(yīng)回調(diào),對應(yīng)transition也有一個(gè)transitionEnd回調(diào)會(huì)在動(dòng)畫后觸發(fā),偶爾不靈就采用setTimeout吧。

這里舉一個(gè)更加適用于項(xiàng)目的例子:


復(fù)制代碼
代碼如下:

<html>
<head>
<meta charset="utf-8" />
<title>Blade Demo</title>
<style type="text/css">
@-webkit-keyframes itemFrame {
from { -webkit-transform: translateY(-80px); }
to { -webkit-transform: translate(0); }
}
* { margin: 0; padding: 0; }
#demo li { list-style: none; border: 1px solid black; margin: 10px; padding: 10px; }
.animateItem { -webkit-animation: itemFrame 1s ; }</p> <p> </style>
<script id="others_zepto_10rc1" type="text/javascript" class="library" src="<a ></script</a>>
</head>
<body>
<ul id="demo">
</ul>
<script>
var el = $('#demo');
for(var i = 0; i < 10; i++) {
var li = $('<li>項(xiàng)目_' + i);
el.append(li);
}
var items = $('#demo li');</p> <p> function animatFn() {
$.each(items, function (i) {
var el = $(this);
el.css('-webkit-animation-delay', i * 50 + 'ms');
el.addClass('animateItem');
})
}</p> <p> items.on('webkitAnimationEnd', function () {
items.removeClass('animateItem');
items.css('-webkit-animation-delay', '');
});</p> <p> animatFn();</p> <p> setInterval(function () {
animatFn();
}, 3000)</p> <p></script>
</body>
</html>

這是一個(gè)list頁面的經(jīng)典效果,做得好會(huì)讓人眼前一亮,當(dāng)然做得不好也會(huì)讓人頭疼,這里為了效果便代碼上循環(huán)了下,這里有一個(gè)知識(shí)點(diǎn)要說下:


復(fù)制代碼
代碼如下:
瀏覽器的dom操作與頁面渲染時(shí)互斥的

以代碼為例:


復(fù)制代碼
代碼如下:

$.each(items, function (i) {
var el = $(this);
el.css('-webkit-animation-delay', i * 50 + 'ms');
el.addClass('animateItem');
})

事實(shí)上每次循環(huán)皆將class與css屬性同步設(shè)置到了dom上但沒有執(zhí)行動(dòng)畫,而是整個(gè)dom操作執(zhí)行結(jié)束后才執(zhí)行的,如果這里代碼加入時(shí)間片便不一樣了

這樣的話一次循環(huán)會(huì)馬上執(zhí)行,隨后會(huì)執(zhí)行其中的一個(gè)個(gè)setTimeout的代碼,也可以看到setTimeout之間的時(shí)序不太好被保證,比如item有100項(xiàng)


復(fù)制代碼
代碼如下:

function animatFn() {
$.each(items, function (i) {
setTimeout($.proxy(function () {
var el = $(this);
el.addClass('animateItem');
}, this), 300 * i);
})
}

更復(fù)雜的效果,比如模擬qq的頁面轉(zhuǎn)場動(dòng)畫,就要與專業(yè)的重構(gòu)同事上場了,可以看這個(gè)代碼:

https://github.com/yexiaochai/cssui/tree/gh-pages

demo地址:http://yexiaochai.github.io/cssui/demo/debug.html#a

結(jié)語

初學(xué)重構(gòu),如果文中有何不足,請您留言

相關(guān)文章

  • CSS3 最強(qiáng)二維布局系統(tǒng)之Grid 網(wǎng)格布局

    CS3的Grid網(wǎng)格布局是目前最強(qiáng)的二維布局系統(tǒng),可以同時(shí)對列和行進(jìn)行處理,將網(wǎng)頁劃分成一個(gè)個(gè)網(wǎng)格,可以任意組合不同的網(wǎng)格,做出各種各樣的布局,本文介紹CSS3 最強(qiáng)二維布局系
    2025-02-27
  • 如何使用CSS3實(shí)現(xiàn)波浪式圖片墻

    本文介紹了如何使用CSS3的transform屬性和動(dòng)畫技巧實(shí)現(xiàn)波浪式圖片墻,通過設(shè)置圖片的垂直偏移量,并使用動(dòng)畫使其周期性地改變位置,可以創(chuàng)建出動(dòng)態(tài)且具有波浪效果的圖片墻,同
    2025-02-27
  • CSS3模擬實(shí)現(xiàn)一個(gè)雷達(dá)探測掃描動(dòng)畫特效(最新推薦)

    文章介紹了如何使用CSS3實(shí)現(xiàn)一個(gè)雷達(dá)探測掃描的效果,包括夜色背景、蜘蛛網(wǎng)盤、掃描體的轉(zhuǎn)動(dòng)效果、尾巴陰影以及被掃描到的光點(diǎn),通過HTML和CSS的配合,實(shí)現(xiàn)了豐富的動(dòng)畫效果,
    2025-02-21
  • css3 display:flex 彈性盒模型的使用方法

    CSS3的Flexbox是一種強(qiáng)大的布局模式,通過設(shè)置display:flex可以輕松實(shí)現(xiàn)對齊、排列和分布網(wǎng)頁元素,它解決了傳統(tǒng)布局方法中的對齊、間距分配和自適應(yīng)布局等問題,接下來通過本
    2025-02-19
  • css3 實(shí)現(xiàn)icon刷新轉(zhuǎn)動(dòng)效果

    本文給大家介紹css3 實(shí)現(xiàn)icon刷新轉(zhuǎn)動(dòng)效果,文章開頭給大家介紹了webkit-transform、animation、@keyframes這三個(gè)屬性,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一
    2025-02-19
  • CSS3動(dòng)態(tài)效果之過渡屬性(最新推薦)

    CSS3過渡屬性用于實(shí)現(xiàn)元素從一種樣式平滑過渡到另一種樣式,通過設(shè)置transition-property過渡屬性、transition-duration過渡時(shí)長transition-timing-function過渡函數(shù)和trans
    2025-02-19
  • CSS3實(shí)現(xiàn)動(dòng)態(tài)旋轉(zhuǎn)加載樣式的示例代碼

    本文介紹了如何使用CSS3創(chuàng)建一個(gè)簡單的動(dòng)態(tài)旋轉(zhuǎn)加載樣式,通過定義一個(gè)帶有類名“l(fā)oader”的HTML元素,并使用CSS樣式和@keyframes規(guī)則來實(shí)現(xiàn)旋轉(zhuǎn)動(dòng)畫,你可以根據(jù)需要調(diào)整樣式
    2025-02-19
  • 使用CSS3實(shí)現(xiàn)平滑的過渡動(dòng)畫效果(實(shí)例代碼)

    這篇文章主要介紹了如何使用CSS3的transition屬性實(shí)現(xiàn)平滑的過渡動(dòng)畫,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-02-13
  • CSS3中使用flex和grid實(shí)現(xiàn)等高元素布局的示例代碼

    本文介紹了使用CSS3中的Flexbox和Grid布局實(shí)現(xiàn)等高元素布局的方法,通過簡單的兩列實(shí)現(xiàn)、每行放置3列以及全部代碼的展示,展示了這兩種布局方式的實(shí)現(xiàn)細(xì)節(jié)和效果,感興趣的朋
    2025-02-11
  • 使用CSS3和SVG創(chuàng)建圓形進(jìn)度條動(dòng)畫效果

    CSS3和SVG的結(jié)合使用為網(wǎng)頁設(shè)計(jì)帶來了創(chuàng)新的動(dòng)態(tài)視覺效果,本文通過一個(gè)圓形進(jìn)度條的動(dòng)畫特效示例,展示了如何利用CSS3的動(dòng)畫功能和SVG的矢量圖形能力來創(chuàng)建豐富的用戶交互體
    2024-10-24

最新評論