您的当前位置:首页正文

# H5 一些新特性

来源:华佗小知识

1. 充满全屏

  • webkitRequestFullScreen()
  • 取消全屏: webkitCancelFullScreen()

注意:1).全屏操作是需要用户去触发的,自己不会触发,在火狐上全屏是:mozRequestFullScreen();
2).取消全屏是加给document的:document.webkitCancelFullScreen();

2. 帧动画 window.RequestAnimationFrame(fn)

简单实例:

<script>
    //获取元素和上下文对象
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    //创建小球对象
    var ball = {
        x: 50,
        y: 50,
        r: 30,
        speedX: 5,
        speedY: 3,
        draw: function () {
            ctx.beginPath();
            ctx.arc(this.x,this.y,this.r,0,Math.PI*2,false);
            ctx.closePath();
            ctx.fillStyle = 'red';
            ctx.fill();
        },
        move: function () {
            this.x += this.speedX;
            this.y += this.speedY;

            if(this.x >= 500 - this.r || this.x <= this.r){this.speedX *= -1};
            if(this.y >= 500 - this.r || this.y <= this.r){this.speedY *= -1};
        }
    };
    // ball.draw();
    //通过定时器让小球移动 
    // setInterval(function () {
    //  ctx.clearRect(0,0,500,500);
    //  //移动小球,然后绘制
    //  ball.move();
    //  ball.draw();
    // },10);
    
    // 通过延时定时器让小球移动
    // function gameloop() {
    //  ctx.clearRect(0,0,500,500);
    //  ball.move();
    //  ball.draw();
    //  //使用timeout实现interval的功能,实际上就是自己调用自己
    //  setTimeout(gameloop, 10);
    // }
    // gameloop();

    var a = null;
    var n = 0;
    function animation() {
        // n++;
        // if(n % 5 == 0){
        // 每隔5帧执行一次
            ctx.clearRect(0,0,500,500);
            ball.move();
            ball.draw();
        // }
        // 
        console.log(ball.x);
        
        //设置帧动画
        //requestAnimationFrame 使用帧,进行动画效果,保证每隔一帧执行一次
        //两次执行中间的时间间隔不确定,由电脑性能来决定
        //如果使用帧动画,需要注意:利用取余运算,进行时间的选取,称为 每隔多少帧执行一次
        //取消动画的方式和interval、timeout一样,都有单独的方法,都有把返回值做参数
        a = window.requestAnimationFrame(animation);
    }
    // 先调用一次启动动画
    animation();
    var n = false;
    document.onclick = function () {
        //取消帧动画
        if (n == false) {
            n = true;
            window.cancelAnimationFrame(a);
        } else {
            n = false;
            a = window.requestAnimationFrame(animation);
        }
        
    }
</script>

3. cookie (这不是H5新特性,老早就有了,最多能存4k 的)

直接上封装的代码

;(function () {

    // 存储cookie
    function setCookie(key, value, day) {
        // 如果date存在,则需要设置过期时间
        // 如果不存在,则直接存储
        if (day == undefined) {
            document.cookie = (key + "=" + value);
        } else {
            // 需要处理过期时间
            var date = new Date();
            date.setDate(date.getDate() + day);
            document.cookie = (key +"="+ value +"; expires=" + date.toUTCString());
        }
    }


    // 取出cookie
    function getCookie(key) {
        // 创建空对象,目的是存储所有的键值对
        var obj = {};

        var cookies = document.cookie.split("; ");
        for (var item of cookies) {
            // 把每个元素根据 = 进行分割
            item = item.split('=');
            // 取出key值和value值分别赋值给obj对象
            obj[item[0]] = item[1];
        }

        return (key ? obj[key] : obj);
    }


    // 删除cookie
    function removeCookie(key) {
        setCookie(key, '', -1);
    }

    //清除
    function clearCookie(){
        for(var key in getCookie()){
            setCookie(key,'',-1);
        }
    }

    // 把局部函数交给window
    // 提升作用域
    window.setCookie = setCookie;
    window.getCookie = getCookie;
    window.removeCookie = removeCookie;
    window.clearCookie = clearCookie;

})();

4. 本地储存 sessionStorage 和 localStorage

  • sessionStorage 定义:用户浏览某个网站的时候,进入网站到浏览器关闭所经过的时间,也就是用户在浏览这个网站所话费的时间; sessionStorage 为临时保存,如果新打开一个页面,或者关闭浏览器,那么这个sessionStorage 就消失了; 5M大小
  • localStorage 定义:将数据保存在客户端本地的硬件设备中; 即使浏览器关闭,该数据仍然存在,下次打开浏览器访问网站时,仍然可以使用; localStorage 为永久保存; 5M大小。

优势:1).跨浏览器、解决请求头常带储存信息的问题、解决了4k大小的问题、解决了关系型储存的问题;
2).储存的内容:数组、json数据、图片、脚本、样式文件;

  • 语法(这两个的语法差不多一样)
// 储存
sessionStorage.setItem(key, value);
localStorage.setItem(key,value);
// 读取
sessionStorage.getItem(key);
localStorage.getItem(key);
// 移除
sessionStorage.removeItem(key);
localStorage.removeItem(key);
// 清除
sessionStorage.clear();
localStorage.clear();

5. 离线缓存 manifest

  • manifest 是一个同名后缀为manifest的文件,在文件中定义那些需要缓存的文件,支持manifest的浏览器,将会按照manifest文件的规则进行保存数据,从而在没有网络的情况下,也可以访问。

  • 当第一次正确配置app cache后,再次访问该应用时,浏览器会首先检查manifest是否有变动,如果有变动,则把响应的变化更新下来,同时改变浏览器的app cache,如果没有变动,就会直接把app cache的资源返回。

  • 使用:

1)、首先在html标签中增加一个manifest属性。用来指定当前页面的manifest文件。

<html manifest="manifest.manifest">
// manifest=后加manifest文件的地址。

2)、创建一个和html同名的manifest,然后给index.html文件添加属性,
3)、html文件设置完成后,后面去操作后缀为 manifest 文件
后缀为manifest文件中的写法示例: CACHE MANIFEST
#version 1.01
css/index.css
js/index.js
index.html