新的html标准——html5

html能干什么?你可能会说:不就是网页标签语言吗,有什么大不了的。NO!提到html,我们就不得不谈谈时下很火的,充满应用前景,颠覆一切,令人激动不已的新标准——html5,这才是html的未来。

其实html5早在六年前就拉开了它的历史序幕,到目前为止关于html5规范的制定还没有成熟(其实html4都没有完全成熟),但关键是现在浏览器厂商已经着手支持html5中的很多优秀的新功能了,并且支持的功能也会越来越完善,只要你愿意,你现在就可以使用html5来开发web应用,然后你就知道,html5对用户带来的体验有多么棒!

html5之所以是颠覆性的,是因为它包含了很多以前没有的功能,比如:canvas,geolocation,audio和video,websocket API及协议,拖放,离线web应用,xmlhttprequest level 2等等,这里只列出了很小的一部分。

好的,现在就让我们来见识一下html5的魔力,我们用一个实例引入,先来看看最终的效果:

注意这可不是flash,这完全是用代码实现的,那么是如何做到的呢?

//下面是实现它的步骤:
//首先创建一个canvas

1   <canvas id="trails" style="border: 1px solid;"  width="400" height="600"> </canvas>

 //判断浏览器是否支持html5

1       if (!document.createElement('canvas').getContext) {
2         var msg = document.createElement("div");
3         msg.id = "errorMsg";
4         msg.innerHTML = "Your browser does not support html5<br/>please use Chrome/IE9/Firefox/opera-----mike.j"; 
5         document.body.appendChild(msg);
6       } 

//加载两张图片,第一张为小路的背景图,第二张为雨天纹理效果的透明图

 1      var canvas = document.getElementById("trails");
 2         var gravel = new Image();
 3         gravel.src = "gravel.jpg";
 4         gravel.onload = function () {
 5             drawTrails(); //图片加载完毕后,调用drawTrails函数,开始作画。
 6         }
 7 
 8         var rain = new Image();
 9         rain.src = "rain.png";
10         rain.onload = function () {
11         window.requestAnimFrame(loopAnimation, canvas);
12         }

//createCanopyPath函数的作用是构建树的路径

 1         function createCanopyPath(context) {
 2             context.beginPath();
 3             context.moveTo(-25, -50);
 4             context.lineTo(-10, -80);
 5             context.lineTo(-20, -80);
 6             context.lineTo(-5, -110);
 7             context.lineTo(-15, -110);
 8 
 9             context.lineTo(0, -140);
10 
11             context.lineTo(15, -110);
12             context.lineTo(5, -110);
13             context.lineTo(20, -80);
14             context.lineTo(10, -80);
15             context.lineTo(25, -50);
16             context.closePath();
17         }

//drawTree函数做出树冠和树的阴影,下雨天也有阴影。。。囧!

 1         function drawTree(context) {
 2             context.save();
 3             context.transform(1, 0,
 4                               -0.5, 1,
 5                               0, 0);
 6             context.scale(1, 0.6);
 7             context.fillStyle = 'rgba(0, 0, 0, 0.2)';
 8             context.fillRect(-5, -50, 10, 50);
 9             createCanopyPath(context); //上面构建好阴影后,调用createCanopyPath画出阴影
10             context.fill();
11             context.restore(); //画完后,恢复之前的绘图状态
12 
13             var trunkGradient = context.createLinearGradient(-5, -50, 5, -50); //创建树干的左右渐变色
14             trunkGradient.addColorStop(0, '#663300');
15             trunkGradient.addColorStop(0.4, '#996600');
16             trunkGradient.addColorStop(1, '#552200');
17             context.fillStyle = trunkGradient;
18             context.fillRect(-5, -50, 10, 50);
19 
20             var canopyShadow = context.createLinearGradient(0, -50, 0, 0); //创建树干的上下渐变色
21             canopyShadow.addColorStop(0, 'rgba(0, 0, 0, 0.5)');
22             canopyShadow.addColorStop(0.2, 'rgba(0, 0, 0, 0.0)');
23             context.fillStyle = canopyShadow;
24             context.fillRect(-5, -50, 10, 50);
25 
26             createCanopyPath(context); //这里开始画树冠
27 
28             context.lineWidth = 4;
29             context.lineJoin = 'round';
30             context.strokeStyle = '#663300';
31             context.stroke();
32 
33             context.fillStyle = '#339900';
34             context.fill();
35         }

//终于到重点了,drawTrails函数,开始绘制

 1         function drawTrails() {
 2            var context = canvas.getContext('2d');
 3             context.save();
 4             context.clearRect(0, 0, 400, 600);
 5 
 6             context.translate(130, 250); //平移到第一个位置
 7             drawTree(context); //画第一颗树
 8             context.restore();
 9 
10             context.save();
11             context.translate(260, 500); //平移到第二个位置
12 
13             context.scale(2, 2); //宽和高都放大两倍
14             drawTree(context); //画第二颗树
15             context.restore();
16          //这里开始画小路
17             context.save();
18             context.translate(-10, 350);
19             context.beginPath();
20             context.moveTo(0, 0);
21             context.quadraticCurveTo(170, -50, 260, -190); //绘制小路的曲线
22             context.quadraticCurveTo(310, -250, 410,-250);
23             context.strokeStyle = context.createPattern(gravel, 'repeat'); //用加载好的图片填充小路
24             context.lineWidth = 20; //路宽为20px
25             context.stroke();
26             context.restore();
27          //这里开始添加一段canvas文本
28             context.save();
29             context.font = "50px impact";
30             context.textAlign = 'center';
31             context.fillStyle = '#996600';
32             context.fillText('attention please !', 200, 60, 400);
33             context.restore();
34         }

//到目前为止,这张画已经完成了。但正如大家看到的,canvas里面还有下雨闪电的效果,这是如何实现的呢?继续往下面看。。。
//requestAnimFrame函数在不同浏览器版本不同,这里合并成单个函数,合并后可支持所有浏览器

 1         window.requestAnimFrame = (function(){
 2           return  window.requestAnimationFrame       ||
 3                   window.webkitRequestAnimationFrame ||
 4                   window.mozRequestAnimationFrame    ||
 5                   window.oRequestAnimationFrame      ||
 6                   window.msRequestAnimationFrame     ||
 7                   function(/* function */ callback, /* DOMElement */ element){
 8                     window.setTimeout(callback, 1000 / 60);
 9                   };
10         })();

//这里开始制作闪电和暴雨的效果。

 1         function drawAFrame() {
 2           var context = canvas.getContext('2d');
 3           context.save();
 4           
 5           drawTrails();
 6         //让天色大多数时间阴沉,创建出闪电的效果
 7           if (Math.random() > 0.03) {
 8             context.globalAlpha = 0.65;
 9             context.fillStyle = '#000000';
10             context.fillRect(0, 0, 400, 600);
11             context.globalAlpha = 1.0;
12           }
13         //然后根据当前时间进行调整,绘制雨天图像
14           var now = Date.now();
15           context.fillStyle = context.createPattern(rain, 'repeat');
16         //创建雨滴,并且基于时间进行重新定位
17           context.save();
18           context.translate(-256 + (0.1 * now) % 256, -256 + (0.5 * now) % 256);
19           context.fillRect(0, 0, 400 + 256, 600 + 256);
20           context.restore();
21         //第二个矩形以不同的速率进行,表示暴雨
22           context.save();
23           context.translate(-256 + (0.08 * now) % 256, -256 + (0.2 * now) % 256);
24           context.fillRect(0, 0, 400 + 256, 600 + 256);
25           context.restore();
26           
27           context.font = '25px san-serif';
28           context.textAlign = 'center';
29           context.fillStyle = '#990000';
30           context.fillText('rain day, Remember bring an umbrella', 200, 550, 400);
31 
32           context.restore();
33         }

//最后递归调用loopAnimation函数,雨滴效果就有了。

1         function loopAnimation(currentTime) {
2           drawAFrame();
3           window.requestAnimFrame(loopAnimation, canvas);
4         }

ok,大功告成!

怎么样,很好玩吧?其实这个实例只用到了html5的<canvas>元素,并且只是很基本的应用而已,关于<canvas>元素,完全可以写一本书(并且是一本还不会很薄的书),只要你想,你完全可以学会。现在就开始,go get it!

最后给大家推荐一个html5实例的网站:http://mrdoob.com/

-----Edit by Mike.j

转载于:https://www.cnblogs.com/tstcxxzx/archive/2013/05/10/3071472.html

猜你喜欢

转载自blog.csdn.net/weixin_33889245/article/details/93723459