您當前位置:
首頁 >
互聯網 > 看IE11如何助力AAF推動公益事業
看IE11如何助力AAF推動公益事業
來源:程序員人生 發布時間:2014-09-16 11:17:29 閱讀次數:2167次
在北京舉辦的亞洲動物基金成立15周年慶典活動上,AAF授予了微軟“最佳教育貢獻獎”,以表彰其對動物保護的支持和貢獻,并與IE11瀏覽器攜手推出了“月熊志”網站。該網站使用最新的HTML5技術,讓用戶能夠通過網絡身臨其境的了解可愛的月熊。通過豐富的3D動畫、高清圖片和視頻、以及自然的觸控操作,讓人們在網頁上也能獲得如應用一般流暢的沉浸式用戶體驗,更直觀地了解月熊保護的故事,而且能夠讓網友和內容進行有趣的互動,從而更好地調動了大家參與的積極性。
像翻閱雜志一樣輕松,網站中的翻頁
整個體驗的名字叫月熊志,總共分為三部分組成,第一部分內容是一只叫Jasper的熊和他小伙伴之間的故事,第二部分講Jasper和他小伙伴的過去,活熊取膽所帶來的一些痛苦的經歷,第三部分則是將AAF在這
15 年過程當中對于拯救黑熊還有動物福利作出的貢獻。
用戶在瀏覽整個體驗的過程當中,就像翻閱一本雜志一樣輕松,網站中的翻頁依靠了CSS
Transitions和CSS Transforms,但這又不是一本傳統的電子雜志,在雜志中開發者加入了非常豐富的 3D元素、高清圖、視頻和信息交互方式,并且可以觸控流暢體驗,讓人們沉浸在月熊的故事和AAF為保護月熊所做的努力中。
技術要點:
CSS transition
CSS transition屬性的作用是:平滑的改變CSS的值。無論是點擊事件,焦點事件,還是鼠標hover,只要值改變了,就是平滑的,就是動畫。于是,在整個網站通用的class中加入transition屬性,就可以很輕松的漸進增強地實現動畫效果,超有實用價值。
transition有的具體屬性見下面介紹:
- transition-property :* //指定過渡的性質,比如transition-property:backgrond 就是指backgound參與這個過渡
- transition-duration:*//指定這個過渡的持續時間
- transition-delay:* //延遲過渡時間
- transition-timing-function:*//指定過渡類型,有ease | linear | ease-in | ease-out
| ease-in-out | cubic-bezier
例如下面的例子
.trans{
display: inline-block;
padding:1px8px;
transition-property: background-color;
transition-duration: 0.3s;
transition-timing-function: ease;
}
.trans:hover{
background-color:#486AAA;
color:#fff;
}
<ahref="#"class="trans">經過我~~~</a>
當然也可以不用把transition屬性一個一個攤開寫,而是合并。如:
.trans {
display: inline-block;
padding:1px8px;
transition: background-color 0.3s ease;
}
transition中的transition-timing-function屬性有一堆ease相關的值(linear | ease-in |
ease-out | ease-in-out | cubic-bezier)。
- linear :均勻的平緩的效果
- ease-in :先慢后快的緩動效果
- ease-out :先快后慢的緩動效果
- ease-in-out:先慢后快再慢的緩動效果
- cubic-bezier:平時基本不會用到
CSS transform
CSS transform指變換,類似于PS中的Ctrl+T自由變換。Transform包含拉伸,壓縮,旋轉,偏移等。
Transform包含下面屬性:
- none :指定一個身份轉變
- matrix(<number>, <number>, <number>, <number>,
<number>, <number>) :以一個含六值的(a,b,c,d,e,f)變換矩陣的形式指定一個2D變換,相當于直接應用一個[a
b c d e f]變換矩陣
- translate(<translation-value>[, <translation-value>]) :通過矢量[tx,
ty]指定一個2D translation, tx 是第一個過渡值參數, ty 是第二個過渡值參數選項。如果<ty> 未被提供,則ty以
0 作為其值
- translateX(<translation-value>) :通過給定一個X方向上的數目指定一個translation
- translateY(<translation-value>) :通過給定Y方向的數目指定一個translation
- scale(<number>[, <number>])提供執行[sx,sy]縮放矢量的兩個參數指定一個2D scale(2D縮放)。如果第二個參數未提供,則取與第一個參數一樣的值
- scaleX(<number>) :使用 [sx,1] 縮放矢量執行縮放操作,sx為所需參數
- scaleY(<number>) :使用 [i,sy] 縮放矢量執行縮放操作,sy為所需參數
- rotate(<angle>) :通過指定的角度參數對原元素指定一個2D rotation(2D 旋轉),需先有transform-origin屬性的定義
- skewX(<angle>) :按給定的角度沿X軸指定一個skew transformation(斜切變換)
- skewY(<angle>) :按給定的角度沿Y軸指定一個skew transformation(斜切變換)
- skew(<angle> [, <angle>]) :X軸Y軸上的skew transformation(斜切變換)。第一個參數對應X軸,第二個參數對應Y軸。如果第二個參數未提供,則值為0,也就是Y軸方向上無斜切
transform屬性要是加上transition的過渡特性,那就是如虎添翼,例如下面的例子:
.trans_effect{
display:block;
line-height:100px;
width:100px;
background:#beceeb;
margin:30px auto;
text-align:center;
-webkit-transition:all 2s ease-in-out;
-moz-transition:all 2s ease-in-out;
-o-transition:all 2s ease-in-out;
-ms-transition:all 2s ease-in-out;
transition:all 2s ease-in-out;
}
.trans_effect:hover{
-webkit-transform:rotate(720deg) scale(2,2);
-moz-transform:rotate(720deg) scale(2,2);
-o-transform:rotate(720deg) scale(2,2);
-ms-transform:rotate(720deg) scale(2,2);
transform:rotate(720deg) scale(2,2);
}
<ahref="#"class="trans_effect"></a>
滿足來自觸控設備用戶的流暢體驗
現在觸控設備越來越多,月熊志網站為了響應觸控,在開發中使用了Hammer.js,這個大小僅為3KB 的JS庫,不僅支持常見的鼠標事件,還支持微軟自Windows 8和IE10以來引入的Pointer API,Pointer API封裝了來自觸摸、筆、鼠標的輸入,能夠對用戶的觸控操作進行統一的捕獲和處理,不論用戶使用什么樣的輸入硬件,都能很好的工作。這讓我們可以更容易的去處理例如Tap,Swipe,Drag這些觸控的操作,滿足來自觸控設備用戶的流暢體驗。另外在網站中很多內容我們也專門制作了豐富的觸控交互場景,需要用戶進行一些觸控的操作,了解更多的內容。
技術要點:
Hammer.js是一個專門用于控制、定制手勢的輕量級JavaScript框架,可以識別出常見的觸摸、拖動、長按、縮放等手勢。免去自己監聽底層touchstart、touchmove、touchend事件并且寫一大堆判斷邏輯的痛苦。支持Android、BlackBerry、iOS及Windows觸屏設備。當然,Hammer.js不但支持觸摸屏設備的瀏覽器,在桌面瀏覽器上,也能將鼠標的點擊當做觸摸,方便開發人員在桌面瀏覽器上調試。
使用方法見代碼:
code_snippet_id="124186" snippet_file_name="ptcms_1387768553_2.js"><script src="http://www.jyygyx.com/uploadfile/20140901/wlsh/http://eightmedia.github.com/hammer.js/hammer.js"></script>
// 先要對監聽的DOM進行一些初始化
varhammer=newHammer(document.getElementById("container"));
// 然后加入相應的回調函數即可
hammer.ondragstart=function(ev){}; // 開始拖動
hammer.ondrag=function(ev){};// 拖動中
hammer.ondragend=function(ev){};// 拖動結束
hammer.onswipe=function(ev){};// 滑動
hammer.ontap=function(ev){};// 單擊
hammer.ondoubletap=function(ev){};//雙擊
hammer.onhold=function(ev){};// 長按
hammer.ontransformstart=function(ev){};// 雙指收張開始
hammer.ontransform=function(ev){};// 雙指收張中
hammer.ontransformend=function(ev){};// 雙指收張結束
hammer.onrelease=function(ev){};// 手指離開屏幕
還支持jQuery插件的形式調用
<script src="http://www.jyygyx.com/uploadfile/20140901/wlsh/http://eightmedia.github.com/hammer.js/jquery.hammer.js"></script>
$("#element")
.hammer({
// 對DOM進行一些初始化,這里可以加入一些參數
})
.bind("tap",function(ev){
console.log(ev);
});
WebGL把Jasper搬到瀏覽器上
月熊志網站的第一部分、使用3D的方式把Jasper栩栩如生的呈現在大家面前,大家可以和他進行交互,并且Jasper也會有非常豐富的動作。網站構建出的3D的場景可以把月熊生長的環境以及氛圍更好的渲染出來,為了更好的展示這些體驗,我們通過WebGL把Jasper搬到瀏覽器上,讓大家了解這種充滿情感的動物。加上一些與Jasper的交互,讓大家能沉浸其中,并且了解月熊的一些特點。
通過Blender這個3D建模軟件構建出了月熊的形象,以及他周圍自然親近的場景,然后結合three.js 這個JavaScript 3D引擎,使得開發者可以在瀏覽器中呈現這些模型和動畫。由于從Blender中導出的這些3D模型的文件體積都比較大,通過網絡去傳輸用戶就需要花費很長的時間去加載,為了保證更為流暢的體驗,不得不想辦法去減小文件的體積,以及在瀏覽器上的響應速度,這完全得益于IE11的硬件加速以及WebGL的高效,可以給大家帶來可以在瀏覽器上運行場景豐富,動畫流暢的3D體驗。
技術要點:
WebGL:2009年,Khronos
Group把這樣的OpenGL技術運用到Web瀏覽器并制定了WebGL。WebGL是OpenGL和JavaScript之間的結晶、HTML5的canvas元素里、利用和OpenGL同樣的API、可以繪制高精度的三維圖像?,F在,占有最大瀏覽器份額的IE11支持WebGL技術。可以說IE11推進了用戶的3D體驗。
Blender是一個開源的多平臺輕量級全能三維動畫制作軟件,提供從建模,動畫,材質,渲染,到音頻處理,視頻剪輯的一系列動畫短片制作解決方案。blender以python為內建腳本,支持yafaray渲染器,同時還內建游戲引擎。Blender為全世界的媒體工作者和藝術家而設計,可以被用來進行3D可視化,同時也可以創作廣播和電影級品質的視頻,另外內置的實時3D引擎讓制作獨立回放的3D互動內容成為可能。
WebGL不提供縮放或旋轉等矩陣函數。因此,繪制 3D 圖形通常使用Three.js 庫(大約一半WebGL 網頁使用)等通用庫就可以完成困難或重復的繪制任務。three.js的代碼托管在github上面。
下面使用three.js創建個簡單的3D模型
1.設置場景
code_snippet_id="124186" snippet_file_name="ptcms_1387768553_3.js">// 設置場景大小
var WIDTH = 400,
HEIGHT = 300;
// 設置一些相機參數
var VIEW_ANGLE = 45,
ASPECT = WIDTH / HEIGHT,
NEAR = 0.1,
FAR = 10000;
// 獲取DOM結構中的元素
// - 假設我們使用了JQuery
var $container = $('#container');
// 創建渲染器、相機和場景
var renderer = new THREE.WebGLRenderer();
var camera =
new THREE.PerspectiveCamera(
VIEW_ANGLE,
ASPECT,
NEAR,
FAR);
var scene = new THREE.Scene();
// 將相機加入場景
scene.add(camera);
// 相機的初始位置為原點
// 將相機拉回來一些,這樣才能看到原點
camera.position.z = 300;
// 啟動渲染器
renderer.setSize(WIDTH, HEIGHT);
// 將渲染器加到DOM結構中
$container.append(renderer.domElement);<b>
</b>
2.構建網格表面 現在有了一個場景,一個相機和一個渲染器,利用Three.js畫球體、平面、立方體、圓柱體等基元:
code_snippet_id="124186" snippet_file_name="ptcms_1387768553_4.js">// 設置球體參數(譯者注:球體被劃分為16×16的網格,如果后兩個參數取4、2,則生成一個八面體,請想象)
var radius = 50,
segments = 16,
rings = 16;
// material覆蓋在geometry上,生成mesh
var sphere = new THREE.Mesh(
new THREE.SphereGeometry(
radius,
segments,
rings),
sphereMaterial);
// 將mesh加入到場景中
scene.add(sphere);
3.創建材質
幾個非常易用的通用材質模型:
Basic材質、Lambert材質、Phong材質。現在,用朗伯面材質覆蓋球體:
code_snippet_id="124186" snippet_file_name="ptcms_1387768553_5.js">// 創建球體表面的材質
varsphereMaterial =
new THREE.MeshLambertMaterial(
{
color: 0xCC0000
});
值得指出的是,創建材質的時候,除了顏色還有很多其他參數可以指定,比如光滑度和環境貼圖。
4.光
如果你現在就想渲染場景,你會看到一個紅色的圓。雖然在球體上覆蓋了朗伯面材質,但場景里沒有光。所以按照默認設定,Three.js會恢復到滿環境光,物體的看上去的顏色就是物體表面的顏色。添加一個簡單的點光源:
code_snippet_id="124186" snippet_file_name="ptcms_1387768553_6.js">// 創建一個點光源
varpointLight =
new THREE.PointLight(0xFFFFFF);
// 設置點光源的位置
pointLight.position.x = 10;
pointLight.position.y = 50;
pointLight.position.z = 130;
// 將點光源加入場景
scene.add(pointLight);
5.渲染循環顯然,關于渲染器的一切都設置好了。萬事俱備,我們現在只需要:
code_snippet_id="124186" snippet_file_name="ptcms_1387768553_7.js">renderer.render(scene, camera);
6.通用的對象屬性 如果你花點時間去瀏覽一遍Three.js的源代碼,你會發現很多對象都繼承自Object3D。這個基類包含了很多有用的屬性,比如位置、旋轉和縮放的信息。特別的,我們的球體是一個Mesh對象,而Mesh對象繼承自Object3D對象,但是又增加了些自己的屬性:geometry和material。
code_snippet_id="124186" snippet_file_name="ptcms_1387768553_8.js">// sphere是一個mesh對象
sphere.geometry
// sphere包含了一些點和面的信息
sphere.geometry.vertices // 一個數組
sphere.geometry.faces // 另一個數組
// mesh對象繼承自object3d對象
sphere.position // 包含x,y,z
sphere.rotation // 同上
sphere.scale // ... 同上
// 設置geometry為動態的,這樣才允許改變其中的頂點
sphere.geometry.dynamic = true;
// 告訴Three.js,需要重新計算頂點
sphere.geometry.__dirtyVertices = true;
// 告訴Three.js,需要重新計算頂點
sphere.geometry.__dirtyNormals = true;

IE11的對HTML5的良好支持,讓開發者可以加入各種豐滿的效果,把整個頁面變得好像活了一樣。同樣IE的硬件加速使得CSS transforms運行的非常高效;另外,IE11中全新的 F12 開發人員工具也幫助我們在開發過程中更方便的進行網站的調試,讓開發者可以清楚的了解到資源以及內存的占用情況以及模擬不同設備的顯示效果。并且微軟推的modern.ie網站也可以讓大家發現網站代碼的問題以及在兼容性方面的一些建議,幫助我們更好的Build整個網站。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈