今天我們開始第三講,我們今天主要看一下fx.tween。和我們看到的其他的mootools函數(shù)一樣,這些方法使用起來都非常簡單,但是功能都很強大。tween可以讓你添加那些極“炫”的效果——可以很平滑地發(fā)生形變動畫,從而改善你的用戶體驗。
tween的快捷方法
我們通常都從“基本知識”入手,不過mootools 1.2只為漸變(tween)提供了這樣極其出色的快捷方法,它們使用起來都極其簡單以至于我忍不住要從這里開始。
.tween();
一個漸變(tween)是一個在兩個樣式屬性值之間的平滑的變化。舉個例子,通過漸變(tween)你可以把div的寬度(width)平滑地由100像素變化為300像素。
參考代碼: [復(fù)制代碼] [保存代碼]
- var tweenerfunction = function() {
-
-
-
- $('tweener').tween('width', '300px');
- }
-
- window.addevent('domready', function() {
-
-
-
- $('tween_button').addevent('click', tweenerfunction);
- });
相應(yīng)于上面的代碼,我們的html代碼看起來大概應(yīng)該是這樣的:
參考代碼: [復(fù)制代碼] [保存代碼]
- <div id="tweener"></div>
- <button id="tween_button">300 width</button>
.fade();
這個方法可以讓你平滑地調(diào)整一個元素的不透明度(opacity)。這個使用起來和上面的例子幾乎一模一樣:
參考代碼: [復(fù)制代碼] [保存代碼]
- var tweenfadefifty = function() {
-
-
-
- $('tweener').fade('.5');
- }
-
- window.addevent('domready', function() {
-
-
-
- $('tween_fade_fifty').addevent('click', tweenfadefifty);
- });
參考代碼: [復(fù)制代碼] [保存代碼]
- <div id="tweener">
- <button id="tween_fade_fifty">fade to fifty percept opacity</button>
.highlight();
醒目(highlight)是一個目標非常明確(也極其有用)的漸變快捷方法,它提供了兩個功能:
- 使用它來平滑變化到一種不同的背景色
- 直接設(shè)置一個不同的背景色,然后平滑變化到另外一個背景色
這些在創(chuàng)建用戶反饋時非常有用。例如,你可以在一個東西被選中時讓某個元素閃一下,或者你改變一下顏色,然后當它保存或者關(guān)閉時再閃一下。這有非常多的選擇,而且非常簡單易用。在這個例子中,讓我們創(chuàng)建兩個div,然后分別添加兩種類型的醒目(highlight)方法:
參考代碼: [復(fù)制代碼] [保存代碼]
- var tweenhighlight = function(event) {
-
-
-
-
-
-
- event.target.highlight('#eaea16');
- }
-
- var tweenhighlightchange = function(item) {
-
-
- item.target.highlight('#eaea16', '#333333');
- }
-
- window.addevent('domready', function() {
- $('tweener').addevent('mouseover', tweenhighlight);
- $('tweenerchange').addevent('mouseover', tweenhighlightchange);
- });
參考代碼: [復(fù)制代碼] [保存代碼]
- <div id="tweener"></div>
- <div id="tweenerchange"></div>
快捷方法示例
這里是一些效果的快捷方法的在線的示例。你可以按不同順序點擊這些按鈕,然后注意一下它們的變化:
參考代碼: [復(fù)制代碼] [保存代碼]
- var tweenerfunction = function() {
- $('tweener').tween('width', '300px');
- }
-
- var tweenergoback = function() {
- $('tweener').tween('width', '100px');
- }
-
- var tweenfadeout = function() {
- $('tweener').fade('out');
- }
-
- var tweenfadefifty = function() {
- $('tweener').fade('.5');
- }
-
- var tweenfadein = function() {
- $('tweener').fade('in');
- }
-
- var tweenhighlight = function(event) {
- event.target.highlight('#eaea16');
- }
-
- window.addevent('domready', function() {
- $('tween_button').addevent('click', tweenerfunction);
- $('tween_reset').addevent('click', tweenergoback);
- $('tween_fade_out').addevent('click', tweenfadeout);
- $('tween_fade_fifty').addevent('click', tweenfadefifty);
- $('tween_fade_in').addevent('click', tweenfadein);
- $('tweener').addevent('mouseover',tweenhighlight);
- });
參考代碼: [復(fù)制代碼] [保存代碼]
- <div id="tweener"></div><br />
- <button id="tween_button">300 width</button>
- <button id="tween_reset">100 width</button>
- <button id="tween_fade_out">fade out</button>
- <button id="tween_fade_fifty">fade to 50% opacity</button>
- <button id="tween_fade_in">fade in</button>
參考代碼: [復(fù)制代碼] [保存代碼]
- #tweener {
- height: 100px
- width: 100px
- background-color: #3399cc
- }
把鼠標移上去可以看到第一種類型的醒目效果。
更多漸變(tween)
創(chuàng)建一個新的漸變
如果你想更靈活多變和更多地控制你的變化效果,你可能想創(chuàng)建一個新的形變動畫來替代那些快捷方式。注意使用“new”來創(chuàng)建一個新的fx.tween的實例:
參考代碼: [復(fù)制代碼] [保存代碼]
- window.addevent('domready', function() {
-
- var newtweenelement = $('newtween');
-
-
- var newtween = new fx.tween(newtweenelement);
- });
參考代碼: [復(fù)制代碼] [保存代碼]
- <div id="newtween"></div>
-
- <button id="nettween_set">set</div>
通過漸變設(shè)置樣式
一旦你從一個元素創(chuàng)建了一個新的漸變,你可以輕松地通過.set()方法設(shè)置一個樣式屬性。這個和.setstyle()方法一樣。
參考代碼: [復(fù)制代碼] [保存代碼]
- var newtweenset = function() {
-
-
- this.set('width', '300px');
- }
就像我們以前學(xué)習(xí)的,我們想要把我們的函數(shù)從domready事件中獨立出來,但是在這個例子中,我們想要在domready事件中創(chuàng)建一個漸變,然后在外部引用它。我們已經(jīng)掌握了一種在domready之外傳遞參數(shù)的方法(通過創(chuàng)建一個匿名函數(shù)并傳遞一個參數(shù)),今天我們要學(xué)習(xí)一種moo化的更好的方式來傳遞漸變對象(這并不是說匿名函數(shù)在任何時候都不再合適)。
.bind();
通過.bind();,我們可以讓一個函數(shù)里面的“this”等同于參數(shù):
參考代碼: [復(fù)制代碼] [保存代碼]
- $('nettween_set').addevent('click', newtweenset.bind(newtween));
因此,現(xiàn)在我們再看看上面的這個函數(shù),“this”現(xiàn)在就等同于“newtween”了(就是我們的tween對象)。
現(xiàn)在我們把這些東西放在一起看看:
參考代碼: [復(fù)制代碼] [保存代碼]
- var newtweenset = function() {
-
-
-
- this.set('width', '300px');
- }
-
- window.addevent('domready', function() {
-
- var newtweenelement = $('newtween');
-
-
- var newtween = new fx.tween(newtweenelement);
-
-
- $('nettween_set').addevent('click', newtweenset.bind(newtween));
- });
啟動一個漸變效果
現(xiàn)在,我們已經(jīng)設(shè)置好了我們所有的漸變對象,我們的函數(shù)在domready事件之外,我們也學(xué)習(xí)了如何通過.set();方法設(shè)置一個樣式表屬性,我們來看看實際的漸變。啟動一個漸變非常簡單,和.fade();非常類似,總共有兩種方式來使用.start();方法:
- 讓一個屬性值從當前值變化到另外一個值
- 先設(shè)置一個屬性值,然后變化到另外一個值
參考代碼: [復(fù)制代碼] [保存代碼]
- newtween.start('width', '300px');
-
- newtween.start('width', '100px', '300px');
現(xiàn)在,你就可以在一個函數(shù)內(nèi)部通過使用.start();方法來啟動這個漸變了,如果你使用了在函數(shù)上通過.bind();方法綁定了“newtween”,你可以使用“this”。
以上這些就是到現(xiàn)在為止全部的漸變(tween)了……
盡管如此,關(guān)于漸變效果仍然有許多可以講的。例如,如果你想一次同時“漸變”多個樣式表屬性,你可以使用.morph();方法。你還可以使用過渡效果庫(transition)來改變它們進行過渡。不過這篇教程已經(jīng)足夠長了,因此我們把這些留在以后再講。
更多學(xué)習(xí)……
下載一個包含你開始所需要的東西的zip包
包含一個mootools 1.2的庫,上面的例子,一個外部javascript文件,一個簡單的html文件和一個css文件。
和以前一樣,你最好的資源是mootools 1.2的文檔。
- 關(guān)于.tween();方法的信息
- 還有,瀏覽一下.morph();方法和transitions庫