2011年6月20日 星期一

Dogfan - HTML5+CSS3的「 お父さん扇風機 」

這是將日本軟銀廣告出現過的「 お父さん扇風機 」(爸爸風扇)用HTML5+CSS3再現的小玩意。

[連結]
DogFan @ heroku
玩法很簡單: 接電再按下面的control XD
基本功能有這些:
  • 電力發動: 所以要接插頭開風扇 (點一下插頭就會接電、再點斷電)
  • お父さん: 把風扇開起來就會聽到牠的叫聲喔~
  • 三段變速: 可以改變風扇的速度,3最快1最慢。另有Slider可以細調
目前只support webkit系的Safari和Chrome-完美版是Mac的Safari,Chrome是轉速有差,Mobile版不論是Chrome或Safari都只有主要動畫及接電效果沒問題
下一個會支援的是FF5,應該在FF 5 release前會完成。IE 9就別問我了,大方向是知道但沒library輔助會很痛苦...

[Source]
本Project有Opensource放在github上喔:DogFan的github

授權是MIT。自行轉host或改造前請讀Readme。

[技術細節]
本文的重點。

風扇組成 - absolute positioning + multiple background,因為是我自己切圖+@evenwu作的psd整理得非常不錯所以我是用了最懶的方法切-就是不做trimming只用show/hide去生png  ̄▽ ̄,變成這部分沒甚麼特別的...
唯一要注意的是為了避免rotateZ block了插頭所以扇葉有加pointer-events:none去預防,不過android的chrome好像不太理會?


扇葉轉動 - CSS3 animation on CSS3 transformation。主要是用rotateZ+linear timing function去轉,所以是用animation duration去控制轉一圈的時間-duration愈短風扇轉的愈快...不過有趣的是就算是webkit轉速看起來也有微妙的不同
  • Chrome 11 (Desktop/Mac) - 轉的比Desktop Safari 5快一點 (就是因為這樣才決定用Range Slider)
  • Chrome (Flyer) - 轉的比Desktop Safari更快,快至我懷疑是有偷格...
  • Chrome (G1) - 明顯有lag所以轉不動或是逆走orz
p.s.1 在某些frequency下會有好像Zoetrope的定格效果...
p.s.2 transform-origin不是50% 50%, 有一點offset...
p.s.3 我有懷疑過是floating point problem,因為我是只用三格keyframe就做完整個animation...


神秘的震動效果 - 條件請自行發掘 XD。那個只是同時更改兩個background的background-position (用common來分),數字是亂填但效果很不錯 XD。和風扇一樣的是用duration控制速度,不過因為不配合風扇的轉速去變速不自然及震太快太傷眼所以用了一個mapping function+DOM style interface去設定duration


插頭接合 - jQuery+CSS3 Transition on background-position,jQuery做event handler去轉插頭(還有風扇)的state而trigger transition (最簡單是加class)。用transition做而非animation的主因是我要保留最後的background-position + 效果很簡單懶的用keyframe...compatibility並不在考慮之列 (FF4淚目)


插頭垂下 - 目前只有Desktop browser才會正確Play的CSS3 Animation,因為涉及keyframe轉換timing function加上一開始有改state而試了fill-mode,所以一堆mobile browser不是不會處理就是錯亂了 XD
話說做來是想看的人意識到那是可以點的東西,不過因為是一載入即Play+Playtime短所以不太看到而變成考驗browser能力的東西orz


お父さん - HTML5 Audio。HTML本身已有audio的tag和source,不過沒control和autoplay(和隱形沒兩樣)。聲音是用js播放,不過在iOS上似乎不出來...(可能因為聲音太短,有人提過此事)


Slider - 這個是用HTML5 的Range Input去做。因為一開始是在Desktop上做所以value會在mouse up的一剎那處理。另外為了配合上面的數字(slider左至右: 小至大,但和轉速相反)所以value得要做成負數、min/max的值要反轉放(但step要是正數)、handler也得要用Math.abs去處理value,不過event handler用.val()就可以拿到slider的值倒是很方便。(jQuery rocks!)


和Java port相比這個的技術其實很簡單...而且很好改(如果有用compass.app會更好),時間其實用了去想animation和風扇行為要怎樣才自然-實作只用了3天,除了第一天外其餘都是工餘時間做的...(第一天還有一半時間去和heroku打交道,剩下的在切圖,風扇轉也只是用css去作)

[特別鳴謝]
  • @sillyleo, 風扇圖的原型的作者
  • @evenwu, 巨大版風扇+PSD檔的作者 (很偉大的任人惡搞)
  • @hlb, 音效提供
-以及Twitter(以及plurk)上提供意見的各位 m(_ _)m

2011年6月10日 星期五

Google另一個歡樂的Doodle: Les Paul結他

這個Doodle本來是昨天紀念結他之父Les Paul 96歲生日而作的結他Doodle,因為可以用mouse和鍵盤彈而大受歡迎,於是和Google Doodle食鬼一樣有permalink,而且還加了錄音和play-by-link的功能~

[Link]
Google Doodle : Les Paul Guitar
* 用iGoogle的人要再按一下傳統首頁才看到       已經會redirect到下面的連結了

Google Doodle : Les Paul Guitar (Permalink)
真正的permalink

[結他教學]
How To Play Guitar On The Les Paul Google Doodle (LESSONS)

[關於錄音]
1. 打開上面的結他連結(任一)
2. 看到結他之後按中間的黑色鍵可以用鍵盤彈+開始錄chord (銀色的status bar會有Recording字樣,黑鍵上的紅燈會亮起)
3. 彈完再按一次黑鍵會停止錄音,之後小等一下銀色的status bar裡會有一個可以autoplay的短網址
4. 這個短網址可以給別人,進入這個網址結他自己就會autoplay剛才的錄音

Enjoy, happy Friday :D

(OT: 技術上這個是用canvas和png sprites做UI、flash做聲音操作的小玩意)
(13/6: 更新連結)

2011年6月7日 星期二

[Browser戰報] 全民狂奔

[IE]
前兩天的Computex 2011發佈會指出Win 8確認會以webapp為重心(還出了video),MIX 11 Demo IE 10才爆出加了一堆東西:
- CSS3 gradient
- CSS3 multiple column
- CSS3 flexible box
- CSS3 Grid layout
- strict mode
(那個魚缸進化版真的很威...)

[Safari]
Lion即將在7月上市,Safari升級至5.1,已有Developer版可下載 - 可以跑WebGL quake
不過我最關心的是來不來的及加入CSS Region...
(看起來Safari好像走IE的舊路,不妙)

[Opera]
1. Opera 11.50 Beta
2. 他們做< input type="color" > (color picker)了啦...
3. Dragonfly有remote debugging console, webkit努力中,mozilla..好像沒有動作

[Firefox]
更新很多...(部分在Aurora 6...)
HTML5
-  < progress >
- 3D youtube (w/Nvidia) , via WebM (official post)
- CSS Animations
- Canvas Update
- Javascript Memory
- Networking
- WebSocket and more
Browser
- Mozilla在兩周前出了Update,建議現有從Beta升級到FF 4的用戶升級Firefox 5 beta (Mac & Win也有)
- Firefox 出了新的dev channel: Aurora, version 6
- Mozilla的Nightly則是到了version 7
(Aurora和Nightly的分別看firefox channel官網就知道了: nightly > aurora > beta > release )

[Chrome]
- Google IO太多新API...比較觸目的是HTML5 WoW Demo過的強化File API和Web Audio
- Google dev的版號好像到了14
- Nightly: Developer Tool可以take JS memory snapshot了...[official post]


[小結]
除了Safari外幾乎是全部browser版號狂奔啊...不過大家不管那個platform都狂追Spec,好事?