Posts Tagged ‘html5’

使用HTML5本地存储local storage示例

April 13th, 2011

http://www.graphicpush.com/using-localstorage-api-as-a-light-database

  • Share/Save/Bookmark

html5资源

March 20th, 2011

JS APIs:

选择器

Web Storage

Web SQL Database

Application Cache API

Web Workers

Web Sockets

Web Notifications

Drag and drop

Geolocation

HTML:

新的语义标签

新链接关系、Microdata、ARIA attributes

新表单元素类型

Audio + Video

Canvas 2D

Canvas 3D(WebGL)

SVG

DEMOs:

转自:http://directguo.com/blog/index.php/2010/08/html5_resources/

  • Share/Save/Bookmark

部分HTML5功能的教学代码

March 20th, 2011
/******************************************************
 * @Web Storage
 ******************************************************/
//一直有效,关闭窗口和重启浏览器后数据依然存在
window.localStorage["key"] = value;

//当前装口有效,关闭窗口和重启浏览器后数据消失
window.sessionStorage["key"] = value;

//不能存放函数,如果是函数会被转换成字符串
//每个域的数据是不能共享的

/******************************************************
 * @Web SQL Database
 ******************************************************/
//1.打开数据库
db = openDatabase("DBTest", "1.0", "HTML5 Database API example", 200000);

//2.判断是否打开成功
if (!db) {
    alert("数据库打开失败");
}
else {
    //3.执行sql查询
    db.transaction(function(tx){
        tx.executeSql("SELECT * FROM Table1Test", [], function(tx, result){
            console.log(r = result);
            for (var i = 0, item = null; i < result.rows.length; i++) {
                //提取结果中第i行数据对象,存入item变量,通过item["id"]这种方式获得该行id字段的值
                item = result.rows.item(i);
                console.log(item);
            }
        });
    });

    //4.插入一条记录
    db.transaction(function(tx){
        tx.executeSql("INSERT INTO Table1Test (id, text) VALUES (?, ?)", [num, document.querySelector('#todoitem').value], function(tx, result){
        }, onError);
    });
}
//查询函数,data为替代sql语句中?的变量的数组
tx.executeSql("sql", data, successCallback, errorCallback)
//例如
tx.executeSql("INSERT INTO Table1Test (id, text) VALUES (?, ?)", [10,"text"], successCallback, errorCallback)

/******************************************************
 * @Web Workers
 ******************************************************/
//main.js:父进程脚本
var worker = new Worker('extra_work.js');
worker.onmessage = function(event){
    alert(event.data);
};

//extra_work.js: 被调用的脚本,子进程

// 这里进行你所需要的计算
postMessage(some_data);//当需要通知父进程时调用,参数传入到父进程的onmessage方法中

/******************************************************
 * @Web Sockets
 ******************************************************/
//连接sockets服务器
var socket = new WebSocket("ws://bloga.jp:80/mychat1");

socket.readyState; //连接状态 0:连接中 1:连接成功 2:连接关闭
//当连接成功时
socket.onopen = function(event){
    console.log("connected!");
}
//当从服务器接收到信息时
socket.onmessage = function(event){
    console.log(event.data);
}
//当连接关闭时
socket.onclose = function(event){
    console.log("closed");
}

/******************************************************
 * @Notifications
 ******************************************************/

window.webkitNotifications.checkPermission();//检查是否允许桌面提示 0:允许 1:禁止。桌面提示的允许状态是按域保存的
window.webkitNotifications.requestPermission();//请求用户允许桌面提示

tip = window.webkitNotifications.createNotification("src/dwd1.png", "提示框的标题", "提示框的内容!!!")
tip.show(); //弹出提示框
tip.close(); //关闭提示框

/******************************************************
 * @Geolocation
 ******************************************************/
navigator.geolocation.getCurrentPosition(function(position){

    position.coords //位置坐标
    position.coords.longitude //经度
    position.coords.latitude //纬度
    position.coords.accuracy //精度
    position.coords.altitudeAccuracy //高度的精度
    position.coords.heading //朝向
    position.coords.speed //速度
    position.timestamp //获取坐标的时间戳
});

/******************************************************
 * @Audio + Video
 ******************************************************/
//获得video对象,audio对象也可以通过此方法,需要在html中放置video或audio标签
Media = document.getElementById("vvv");

//audio对象可以通过这个方法快速创建,video不可以。
Media = new Audio("http://directguo.com/html5/src/france.ogg")

//方法和属性。video和audio方法和属性基本相同
Media.src = value; //返回或设置当前资源的URL
Media.currentTime = value; //当前播放的位置,赋值可改变位置
Media.startTime; //一般为0,如果为流媒体或者不从0开始的资源,则不为0
Media.duration; //当前资源长度 流返回无限
Media.paused; //是否暂停
Media.ended; //是否结束
Media.autoPlay = value; //是否自动播放 true/false
Media.loop = value; //是否循环播放 true/false
Media.play(); //播放
Media.pause(); //暂停
Media.controls = value; //是否有默认控制条 true/false
Media.volume = value; //音量
Media.muted = value; //静音 true/false
//TimeRanges(区域)对象 :该对象描述的是一个或多个区域,例如已经加载的区域为两个部分:1-5.8秒 6-10秒
TimeRanges.length; //区域段数,例如上述例子,应该返回2
TimeRanges.start(i) //第i段区域的开始位置,单位秒
TimeRanges.end(i) //第i段区域的结束位置,单位秒

//事件
eventTester = function(e){//着里定义了一个简单的事件检测函数来检测如下的事件
    Media.addEventListener(e, function(){
        console.log((new Date()).getTime(), e);
    });
}

eventTester("abort"); //客户端主动终止下载(不是因为错误引起),
eventTester("error"); //请求数据时遇到错误
eventTester("play"); //play()和autoplay开始播放时触发
eventTester("pause"); //pause()触发
eventTester("playing"); //开始回放
eventTester("timeupdate"); //播放时间改变
eventTester("ended"); //播放结束
eventTester("ratechange"); //播放速率改变
eventTester("volumechange"); //音量改变

//详细API请看:http://directguo.com/blog/index.php/2010/07/html5-audio-video-tag/

/******************************************************
 * @Canvas2D
 ******************************************************/
var elem = document.getElementById('myCanvas');
var ctx = elem.getContext('2d');

//画矩形
ctx.fillRect(x,y,width,height);  //画一个填充的矩形
ctx.strokeRect(x,y,width,height);  //为一个矩形描边
ctx.clearRect(x,y,width,height);  //清楚一个矩形的一部分并且设为透明
ctx.rect(x, y, width, height); //画矩形

//画路径
ctx.beginPath();//创建路径的第一步是调用beginPath方法,返回一个存储路径的信息
ctx.closePath();//从当前的点到起始点闭合路径
ctx.stroke();//描边路径
ctx.fill();//填充路径
ctx.lineTo(x, y);//从上一个起点到(x,y)的点画线,上一个起点可以通过moveTo来指定,默认为原先路径的终点

//画圆弧
arc(x, y, r, sa, ea, cw);//x,y圆心坐标,r-半径, sa和ea是圆弧的开始和结束弧度cw为true是逆时针,false为顺时针

//画贝塞尔曲线
quadraticCurveTo(cp1x, cp1y, x, y);//二次贝塞尔曲线

//使用图像
drawImage(image, x, y); //image-图像对象

//更多内容请看:http://adamlu.com/?p=157

转自:http://directguo.com/blog/index.php/2010/08/%e9%83%a8%e5%88%86html5%e5%8a%9f%e8%83%bd%e7%9a%84%e6%95%99%e5%ad%a6%e4%bb%a3%e7%a0%81/

  • Share/Save/Bookmark

HTML5特性——prefetching预加载功能

June 8th, 2010

HTML5的一些特性还是比较令人兴奋的,应该说是将这么多年来大家常用的技术或者迫切需要的技术都标准化了,甚是方便。

比如本文要介绍的HTML5的这个特性,就是从我们平常开发的预加载图片延伸出来的:预加载功能。

预加载图片,在当前页面预先加载下个页面需要的图片,以加快下个页面的访问速度,比如Google的首页就会预加载在搜索结果页面需要的图片。

而在HTML5中支持预加载功能,实现起来也是相当的简单,只要一段代码,而且是基于我们很熟悉的link标签实现:

<link rel="next" href="page2.html">

这样的话,浏览器就会在空闲时间(不会占用页面的加载时间)去自动下载page2.html这个页面,这样当用户点击进入page2.html页面是,浏览器就会从缓存中读取这个页面,从而加快页面的访问速度。

当然,这样的一个特性,很大程度上要基于网站的用户行为分析才能进行,否则的话效果会适合其反,预加载了一堆无用信息,浪费了带宽。

目前为止,只有Firefox支持这个特性,但是这个实现过程真是太简单了,就让我们临时无视其他浏览器吧哈哈

以下是一些使用的方法:

  1. 任何时候你打算将内容分割成多页时,比如一篇巨长的文章,在线的教程,或者图片幻灯片等等
  2. 在你的主页你可以加载你的用户可能会点击的页面内容(比如你的产品特色介绍,或者你最新的博客日志等等)
  3. 在搜索引擎可以预加载一些热门的搜索结果等等

当然,除了可以预加载页面,我们也可以使用这个特性预加载一些静态内容,比如图片,css文件等等

仍然是使用link标签即可以实现,很方便吧

<link rel="prefetch" href="/images/big.jpeg">

一些其他有趣的观点:

  • Opera, Chrome, Safari可能不久后就会支持预加载特性,但是,IE的话,可能得到2020年也说不定了。
  • 如果这个特性使用频繁的话,极有可能去影响网站的访问日志和统计的。

设想有一堆预加载请求你的某些页面时,但是用户并没有真正的去访问这些页面,对于服务器(或者统计系统)来说,并不知道区别。

为了解决这个问题,Firefox在发出这些预加载请求时,会发送x-moz: prefetch的header信息,但是你需要在服务端做一些逻辑处理来检测这些请求。

更多的预加载相关资料和文章,可以访问https://developer.mozilla.org/en/link_prefetching_faq

Ref:http://keyboardy.com/programming/html5-link-prefetching/

  • Share/Save/Bookmark