HTML5之API

HTML5就是牛,可以直接播放音视频,还可以作图;

一、HTML5中播放视频和音频:

  加载时直接播放音频的方式:new Audio("BY2.mp3").play();

 <div>
      <h1>播放器</h1>
      <!--
          controls:显示播放控件;
       -->
      <h3>视频</h3>
      <video id="mpv" width="60%" height="30%" controls="controls">
          <source src="1.mp4" type="video/mp4">
      </video>
      <h3>音频</h3>
      <audio id="mp" controls="controls">
              <source src="BY2.mp3" type="audio/mp3">
      </audio>

  <script type="text/javascript">
      var video =  $("#mp")[0];
      video.play();
  </script>

简单播放器

二、可伸缩的矢量图形SVG:

  Scalable Vector Graphics: 可伸缩Scalable是因为画的图是分辨率无关的;

  一个简单的SVG时钟:

<div>
    <h1>SVG时钟</h1>
    <svg  xmlns="http://www.w3.org/2000/svg" id="clock" viewBox="0,0,100,100" width="300" height="300">
            <!-- 画圆形 -->
            <circle cy="50" cx="50" r="45" fill= "#eff"/>
            <!-- 刻度线和数字 -->
            <g id="ticks">
                <line x1="50" y1="5.000" x2="50.00" y2="10.00" />
                <text x="46" y="18">12</text>
                <line x1="50" y1="95.000" x2="50.00" y2="90.00" />
                <text x="46" y="88">6</text>
                <line x1="5" y1="50.000" x2="10.00" y2="50.00" />
                <text x="12" y="52">9</text>
                <line x1="95" y1="50.000" x2="90.00" y2="50.00" />
                <text x="83" y="52">3</text>
            </g>
            <!-- 分针与时针  初始化指向12-->
            <g id="hands">
                <line id="hourhand"  x1="50" y1="50" x2="50" y2="25"/>
                <line id="minutehand" x1="50" y1="50" x2="50" y2="20" />         <line  id="secondhand" x1="50" y1="50" x2="50" y2="15"/>            </g>
    </svg>
</div>

css:
  <style type="text/css">
        #clock{
            stroke :black;
            stroke-linecap: round;
        }
        g>text{
            font-family: sans-serif;font-size: 6pt;
        }
    </style>
js:

function updateTime(){
var now = new Date();
var second = now.getSeconds();
var min = now.getMinutes();
var hour= (now.getHours()%12)+min/60;
var secondangele = second*6; //6°是一秒钟
var minangle = min*6; //6°是一分钟
var hourangle= hour*30; //30°是一小时
$("#hourhand").attr("transform","rotate("+hourangle+",50,50)");
$("#minutehand").attr("transform","rotate("+minangle+",50,50)");
$("#secondhand").attr("transform","rotate("+secondangele+",50,50)");
}
$(function(){
setInterval("updateTime()", 1000);
});

 

三、HTML5的<canvas>

  IE9之前版本的浏览器不支持<canvas>;

  修改<canvas>绘制的图形就必须把当前的擦除在重新绘制,而使用SVG绘制的图形,可以通过简单的移除相应的元素来修改图片;

     <canvas id="my_canvas">
     </canvas>
JS:
var c = $("#my_canvas")[0].getContext(‘2d‘);
c.beginPath();

//画线
c.lineTo(100,100);
//画圆 圆心x,y 半径r 开始和结束角度,弧形方向
c.arc(x,y,r,0,2*MATH.PI,false);
//画矩形 四个参数 左上顶点,长和宽;
c.fillRect(); c.strokeRect(); c.clearRect();c.rect()

四、获取地理位置:

function loc(){
    if(navigator.geolocation){
        var options = {
            timeout:50000
        };
        var successCallback = function(pos){
            $("#loc").html(pos.coords.accuracy+" meters latitude: "+
                    pos.coords.latitude+" longitude:"+ pos.coords.longitude);
        };
        var errorCallback = function(e){
            $("#loc").html(e.code+":"+e.message);
        };
       // 获取当前位置
        navigator.geolocation.getCurrentPosition(successCallback, errorCallback, options)
    }
};//监测当前位置
 navigator.geolocation.watchPosition(successCallback, errorCallback, options);
//停止监视位置
 navigator.geolocation.clearWatch();

五、Web Worker:

  解决客户端javaScript无法多线程的问题;Worker是指执行代码的并行线程;

  一个简单的例子:

  1、HTML代码:

<div>
    <h2>Web Worker</h2>
    <button onclick="computer()" value="10000的阶乘" type="button" >100000*10000循环</button>
    <p id="result"></p>
    <button onclick="computerWorker()" value="10000的阶乘" type="button" >WebWorker----100000*10000循环</button>
    <p id="resultWorker"></p>
</div>

  2、js代码:

function computer(){
    var start= new Date().getTime();
    var num = 1;
    for (var int = 1; int < 100000; int++) {
        for (var int2 = 0; int2 < 100000; int2++) {
            num = int+num;
        }
    }
    var end = new Date().getTime();
    $("#result").html("计算结果:" +num + "==耗时:"+ (end-start));
}

function computerWorker(){
    var start = new Date().getTime();
    var worker = new Worker(‘myworker.js‘);
    worker.postMessage(100000);
    var end = new Date().getTime();
    worker.onmessage = function(e){
        var num = e.data;
        $("#resultWorker").html("计算结果:" +num + "==耗时:"+ (end-start));
    }

}

JS代码

onmessage = function(e){
    console.log(e);
    postMessage(computerNum(e.data));
};

function computerNum(numData){
    console.log(numData);
    var num = 1;
    for (var int = 1; int < 100000; int++) {
        for (var int2 = 0; int2 < 100000; int2++) {
            num = int+num;
        }
    }
    return num;
}

myworker.js

  通过Worker()构造函数创建的新的Worker的时候,指定包含的JS代码会运行在一个全新的javaScript环境中,与其创建者脚本隔离;该新的运行环境有一个全局对象WorkerGlobalScope;WorkerGlobalScope有所有JavaScript全局对象拥有的那些属性,如JSON对象 isNaN函数和Date构造函数等,其还拥有一些客户端Window的一些属性,如self location navigator和几种计时器方法 setTimeout setInterval()等;测试时发现不支持doucment.get*等函数,可能还不支持文档交互,但是已经支持log输出(chrome);

六、二进制数据Blob和文件系统API:

  1、Blob对象是JavaScript中代表二进制数据的对象;提供了操作二进制数据的接口,在其基础上,实现了FielList对象、File对象、FileReader对象等操作文件的API;在支持<input type="file">的浏览器中,元素上的files属性就是一个FileList对象,代表多个File对象,一个Flle对象就是一个Blob对象;FileReader对象可以访问Blob中的字符或字节;  

<div>
    <h2>文件上传</h2>
    <input multiple="multiple" type="file" accept="*" onchange="fileInfo(this.files)"/>
</div>

function fileInfo(files){
    for (var int = 0; int < files.length; int++) {
        var reader = new FileReader();
        reader.readAsText(files[int]);
        reader.onload = function(){
            console.log(reader.result);
        };
        reader.onerror= function(e){
            console.log("Error",e);
        };
    }
}

一个读取文件的小例子

  2、创建或获取Blob的方法:

      1、var bb = new Blob("text is hhh"); //传入字符创建新的blod;

      2、bb = new BlobBuilder(); bb.append("text is hhhh"); //方便追加字符;

      3、bb.silce(0,1024); //将Blob对象按照字节分块,返回新的Blob对象;

  3、Blob URL:操作Blob,通过createObjectURL(blob)创建一个URL指向改Blob;

  4、操作本地文件系统:

    一、获取一个表示本地文件系统的对象:

      1、Web Worker中使用 var fs = requestFileSystemSync(PERSISTENT,1024*1024); //传入有效期和大小参数;

      2、使用全局函数获取:

 var filesystem;
 requestFileSystem(TEMPORARY,50*1024*1024,function(fs){
    filesystem = fs;
 }, function error(e){
    console.log(e);
 });

          3、操作文件:测试时,不能操作啊!

七、WebSocket:

   浏览器端代码: 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>聊聊</title>
<script type="text/javascript">
window.onload = function(){

    var nick = prompt("who are you?");
    var input = document.getElementById("input");
    input.focus();
    var div = document.createElement("div");

    document.body.insertBefore(div, input);

    var socket = new WebSocket("ws://10.7.6.7/");
    input.onchange = function(){
        var msg = nick+":"+input.value;
        scoket.send(msg);
        var node = document.createTextNode(msg);
        div.appendChild(node);
        input.value = "";
    };

    input.onmessage = function(event){
        var msg = event.data;
        var node = document.createTextNode(msg);
        div.appendChild(node)
        input.scrollIntoView();
    };
}
</script>
</head>
<body>
    <input id="input" style="width: 100%" />
</body>
</html>

chat.html

  node服务端代码:

var http = require("http");
var ws = require("webscoket-server");

var httpserver = new http.Server();

var clientui = require(‘fs‘).readFileSync("webchat.html");

httpserver.on("request",function(request,response){

    if(request.url ==="/"){
        response.writerHead(200,{"Content-Type":"text/html"});
        response.write();
        response.end();
    }else{
        response.writeHead(404);
        response.end();
    }
});

var wsserver = ws.createServer({server:httpserver});
wsserver.on("connection",function(socket){
    scoket.send("w t caht room");
    socket.on("message",function(msg){
        wsserver.broadcast(msg);
    });
});

wsserver.listen(8000);

scoket.js

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>聊聊</title>
<script type="text/javascript">

</script>
</head>
<body>
    <input id="input" style="width: 100%" />
</body>
</html>
时间: 2024-10-03 10:12:06

HTML5之API的相关文章

Html5 Selectors API

新QuerySelector方法 querySelector():根据指定的选择规则,返回在页面中找到的第一匹配元素 querySelectorAll():根据指定规则返回页面中所有相匹配的元素 实例: 1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; char

HTML5 Geolocation API精确性[转载]

大家都知道,HTML5 Geolocation 可以使用 IP 地址.基于 Web 的数据库.无线网络连接和三角测量或 GPS 技术来确定经度和纬度. 问题: 在一个基于地理位置服务的个人业余项目(小伙伴在哪儿)中,发现用PC获取的地理位置与手机端获取的地理信息存在微小的差距,PC端会经常出现获取不到地理位置的情况,PC端和手机端的Geolocation是否有什么底层实现方面的差别呢,HTML5又是根据什么原则来确定应该采用何种方式来确定经度和纬度信息呢? 带着这个问题,作者查阅了一些资料,得出

HTML5 History API

以Html5 History API为关键词搜索,会得到很多结果,我仅根据自己的使用整理. 1.两个API pushState和replaceState. pushState向浏览器历史记录里增加一个状态,供浏览器后退前进时使用,用法 history.pushState(data, '页面标题', url); replaceState就是替换某个状态,参数和pushState一样. 2.一个事件 onpopstate. 用户点击了前进或者后退就会触发,而不是使用pushState或者replac

HTML5 file API加canvas实现图片前端JS压缩并上传 (转载)

一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致上传失败风险. 最最重要的体验改进点:省略了图片的再加工成本.很多网站的图片上传功能都会对图片的大小进行限制,尤其是头像上传,限制5M或者2M以内是非常常见的.然后现在的数码设备拍摄功能都非常出众,一张原始图片超过2M几乎是标配,此时如果用户想把手机或相机中的某个得意图片

那些牛掰的 HTML5的API

那些牛掰的 HTML5的API(二) 1:视频播放器 2:地理定位 我们的支持html5 的浏览器给我们提供一个接口(api),可以用来获取你当前的位置. 主要是通过geolocation(地理位置),对象 ,去访问硬件,来获取到经纬度.. 1 if (navigator.geolocation){ 2 navigator.geolocation.getCurrentPosition(showPosition); 3 } else{ 4 x.innerHTML="Geolocation is n

HTML5 File API初探 支持文件拖放上传功能

新一代Web开发标准HTML 5可以带来远远超出其本身作为一种标记语言的能力,除我们之前介绍的HTML 5可完美支持视频音频元素外,还提供一些强大的脚本工具,负责监督HTML5发展进程的W3C组织,刚刚出版了一份有关文档操作API的规格草案,HTML5 File API 接口功能. 该HTML5 File API的设计初衷,是改善基于浏览器的Web应用程序处理文件上传的方式,使文件直接拖放上传成为可能.草案定义了新的输入选项 ﹤input type=”file”﹥ 来处理文件上传. 更为惊喜的是

HTML5 file api读取文件的MD5码工具

1.工具的用途:用HTML5 file api读取文件的MD5码.MD5码在文件的唯一性识别上有很重要的应用,业内常用MD5进行文件识别.文件秒传.文件安全性检查等: 2.适用性:IE.Chrome皆兼容: 3.缺陷:当上传大文件时,需要较长的时间才能扫描出MD5码: 4.关于引用:其中引用了js文件(spark-md5.js) <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo

HTML5 File API — 拖拽显示

1.HTML5拖拽 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 如果是html中的元素,要进行拖动,需要设置draggable为true. 下面的代码显示了img在两个div里任意拖动. 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <style type="text/css"> 5 #div1, #div2 6 {float:left; width:100px; height:35px;

[HTML5_Web Workers+Sockets]HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦

前言 HTML5新增通信相关两个API,跨文档消息传输与WEB Sockets API, 跨文档消息传输功能,可以在不同网页文档,不同端口(跨域情况下)进行消息传递. 使用web sockets api 可以让客户端与服务器端通过socket端口传递数据,这样便可以使用数据推送技术. 跨文档消息传输 在之前我们若想跨域获取信息会花很多功夫,现在只要获取网页所在窗口对象实例变可以实现互相通信. 首先要想从其他窗口接受发过来的消息需要对其窗口对象进行监听: window.addevntListene

HTML5 程序设计 - 使用HTML5 Canvas API

请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方便查看. 学习笔记,纯手工码字,有错别字什么的请指出,觉得好的请点个赞小小的支持下.谢谢亲们. 本篇,我们将探索如何使用HTML5和Canvas API.Canvas API很酷,可以通过它来动态生成和展示图形.图表.图像以及动画. 本篇将使用渲染API(Rendering API)的基本功能来创建