HTML5实用知识点

本文讲解HTML5实用知识点

新增的表单type
Canvas使用
SVG使用
Audio使用
Video使用
网页缓存
文件缓存
后台worker
Server-Sent Events
定位
拖放功能

  1. 新增的表单type

        <input type="color" name="myColor"> 颜色表单
        <input type="date" name="myDate"> 日期表单
        <input type="email" name="myEmail" required> 邮箱,自带验证
        <input type="month" name="myMonth"> 月份表单
        <input type="number" min="1" max="10" step="0.5" > 数字框
        <input type="range" min="1" max="10" step="0.5" > range输入控件 
        <input type="search" name="mySearch"> 搜索框
        <input type="tel" name="mytelephone" required> 电话框
        <input type="time" name="mytime"> 时间输入框
        <input type="url" name="mywebsite" required> 网址输入框
        <input type="week" name="myweek"> 周选择框
  2. Canvas使用

    • 创建canvas标签
        canvas标签默认宽 300px 高 150px,canvas标签左上角是原点坐标
        <canvas id="myCanvas" widht="500" height="300"></canvas>
    • 画线
        window.onload = function() {
            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d"); // 创建2d上下文
            context.moveTo(50, 100); // 设置线的起点
            context.lineTo(100, 200); // 设置线的终点
            context.stroke(); // 连接两点
        }
    • 画圆弧
        语法格式 context.arc(原点x, 原点y, 半径, 开始角度, 结束角度, 是否逆时针);
        context.arc(200, 100, 50, 0.6 * Math.PI, 1.2 * Math.PI, false); // 描画弧的点
        context.stroke(); // 连接点
    • 画圆
        context.arc(200,100, 50, 0, 2 * Math.PI, false);
        context.stroke();
    • 画矩形
        语法格式 context.rect(起始点坐标x, 起始点坐标y, 矩形宽, 矩形高);
        context.rect(100,100,50,100);
        context.stroke();
    • 改变样式
        stroke方法默认是用宽1pixel的黑色实线画图
        context.strokeStyle = "red"; 设置线的颜色
        context.lineWidth = 5; 设置线的宽度
        context.lineCap = "round"; 设置线端点的形状
        context.fillStyle = "yellow"; 设置填充颜色
        context.fill(); 填充图形,这个方法最好在stroke方法之前使用
    • 使用渐变色
        线性渐变
            context.strokeStyle = "red";
            context.lineWidth = 5;
            context.rect(50,100,100,100);
            var grd = context.createLinearGradient(50,100,150,200); // 创建线性渐变的区域
            grd.addColorStop(0, '#8ED6FF'); // 添加渐变色
            grd.addColorStop(1, '#004CB3');
            context.fillStyle = grd; // 填充
            context.fill();
            context.stroke();
        辐射渐变
            context.strokeStyle = "red";
            context.lineWidth = 5;
            context.arc(150, 100, 70, 0, 2 * Math.PI, false);
            var grd = context.createRadialGradient(150, 100, 10, 150, 100, 100);
            grd.addColorStop(0, '#8ED6FF');
            grd.addColorStop(1, '#004CB3');
            context.fillStyle = grd;
            context.fill();
            context.stroke();
    • 添加文本
        context.font='bold 32px Arial';
        context.textAlign='center';
        context.textBaseline='middle';
        实心文字
            context.fillStyle='red';
            context.fillText("你好吗", 50, 50, 100);
        空心文字
            context.strokeStyle='red';
            context.strokeText("你好吗", 50, 50, 100);
  3. SVG使用

    • 创建svg标签
        svg用来画矢量图形,任意放大缩小都不会丢失图像质量
        <svg width="500" height="500">
            <text x="10" y="20" style="font-size: 14px;">
                你的浏览器支持svg
            </text>
            你的浏览器不支持svg
        </svg>
    • 画线
        <svg width="500" height="500">
            <line x1="50" y1="50" x2="100" y2="150" style="stroke:red;stroke-width:3;"></line>
        </svg>
    • 画矩形
        <svg width="500" height="500">
            <rect x="50" y="50" width="200" height="100" style="fill: red;stroke: black;stroke-width: 3;"></rect>
        </svg>
    • 画圆
        <svg width="500" height="500">
            <circle cx="150" cy="100" r="50" style="fill:limegreen; stroke:black; stroke-width: 3;"></circle>
        </svg>
    • 画文字
        文字块
            <svg width="500" height="500">
                <text x="10" y="20" style="fill:rebeccapurple; font-size: 22px;">你们好吗?</text>
                <text x="10" y="20" dx="0" dy="50" style="fill:chocolate; font-size:20px;">非常好,谢谢!</text>
            </svg>
            x,y表示文本右上角坐标
            dx,dy表示相对于上一个文本的坐标
        文字段
            <svg width="500" height="500">
                <text x="30" y="20" style="fill:palegoldenrod; font-size: 20px;transform:rotate(30deg);">
                    <tspan x="30" y="10" style="fill:violet; font-size: 15px;">欢迎来到这里!</tspan>
                    <tspan dx="-100" dy="20" style="fill:brown; font-size: 20px;">在这里你可以学到很多东西!</tspan>
                </text>
            </svg>
  4. Audio使用

        基本使用
            <audio controls="controls" src="http://fs.w.kugou.com/201801141449/11d9f59f7bbe44baa117d3ee68d537e8/G004/M01/09/07/pIYBAFT6cwOAKJZAACusE60HmfI058.mp3">
                你的浏览器不支持audio
            </audio>
        兼容处理
            <audio controls="controls">
                <source src="birds.mp3" type="audio/mpeg">
                <source src="birds.ogg" type="audio/ogg">
                你的浏览器不支持audio
            </audio>
        使用a标签也可以播放音乐
            <a href="http://fs.w.kugou.com/201801141449/11d9f59f7bbe44baa117d3ee68d537e8/G004/M01/09/07/pIYBAFT6cwOAKJZAACusE60HmfI058.mp3">播放</a>
        使用object标签播放音乐
            object标签用来将各种媒体类型的文件嵌套展示在html文档中
            <object data="http://fs.w.kugou.com/201801141449/11d9f59f7bbe44baa117d3ee68d537e8/G004/M01/09/07/pIYBAFT6cwOAKJZAACusE60HmfI058.mp3" width="200px" height="50px"></object>
        使用embed也可以实现
            <embed src="http://fs.w.kugou.com/201801141449/11d9f59f7bbe44baa117d3ee68d537e8/G004/M01/09/07/pIYBAFT6cwOAKJZAACusE60HmfI058.mp3" width="200px" height="50px">
  5. Video使用

        基本使用
            <video controls="controls" src="http://114.80.149.155/vlive.qqvideo.tc.qq.com/AWxNgT15MDV-qHJX5cxO9KrgFw-QnllWwnyAPHB6Nunc/w0200ph7kmn.p201.1.mp4?vkey=540F0275B3B1E386A056820358C08C5462CAD4EFEA3AAAE522FB267A7752F019FE18D07FCAA4C0F87AB009EC47D87639C8ED5E39EB201E6D8356180B27B087E5DADE51850EE7EF89C62456A8BC8AC0C3BBE07D5AFFA5CFE70502CB7D9B6B2688FFC14D814469155BB96C6949A2FFA0DF69564134A09DA087&platform=10201&sdtfrom=&fmt=shd&level=0">你的浏览器不支持video</video>   
        兼容写法
            <video controls="controls">
                <source src="shuttle.mp4" type="video/mp4">
                <source src="shuttle.ogv" type="video/ogg">
                你的浏览器不支持video
            </video>
        同样也可以使用object和embed播放电影
  6. 网页缓存

    网页缓存可以缓存5M的数据在本地
    localStorage 永久缓存在本地
        if(localStorage) {
            localStorage.setItem("name", "yejiawei"); // 存数据
            console.log(localStorage.getItem("name")); // 取数据
            localStorage.removeItem("name"); // 移除数据
            localStorage.clear(); // 移除所有数据
        }else{
            alert("你的浏览器不支持localStorage");
        }
    sessionStorage 当用户关闭当前页或者关闭浏览器,数据自动清除
        用法和localStorage一样
        if(sessionStorage) {
            sessionStorage.setItem("name", "yejiawei");
            console.log(sessionStorage.getItem("name"));
            sessionStorage.removeItem("name");
            sessionStorage.clear();
        }else{
            alert("你的浏览器不支持sessionStorage");
        }
  7. 文件缓存

        文件缓存可以用来,指导浏览器如何缓存文件和断网的情况下展示什么页面
        先创建一个配置文件,比如test.appcache,写如下内容
            CACHE MANIFEST
            # v1.0: 2018/1/14
            CACHE:
            # 需要缓存的文件
            index.html
            index.css
            NETWORK:
            # 不需要缓存的文件
            124463.js
            FALLBACK:
            # 掉线之后展示的页面
            offline.html
        修改index.html
            <html lang="en" manifest="example.appcache">
        此时浏览器文件缓存已经配置好了,当用户断开与服务器的连接的时候,展示offfline.html文件
  8. 后台worker

    大家应该都知道,js是单线程语言,当计算量很大的时候,会阻塞页面,html5提供了一个web worker的功能可以让你创建类似多线程的功能
    worker需要在一个服务器环境中运行
    将复杂的代码可以单独抽取到一个js文件中,比如index.js
        var i = 0; 
        function countNumber() {
            if(i < 10000){
                i = i + 1;
                postMessage(i); // 将信息发送到主线程上
            }
            console.log(i);
            setTimeout(countNumber, 500)
        }
        countNumber();
    在主线程上调用worker接受信息
        if(window.Worker) {
            var worker = new Worker("./index.js");
            worker.onmessage = function(event) {
                    document.getElementById("showBox").innerText = event.data;
                    if(event.data == 10) {
                        worker.terminate(); // 终止worker
                    }
            }
        }else{
            alert("你的浏览器不支持worker");
        }
  9. Server-Sent Events

    ajax请求使用XMLHttpRequest对象,此对象只会连接一次,如果要和后端建立长时间的连接,就要使用sse了
    前端的写法
        window.onload = function () {
            var source = new EventSource("api/Test");
            source.onmessage = function (event) {
                document.getElementById("box").innerHTML = event.data;
            }
            source.onopen = function (event) {
            }
            source.onerror = function (event) {
            }
        }
    C#后端的写法
        public HttpResponseMessage Get ()
        {
            HttpResponseMessage response = Request.CreateResponse();
            response.Content = new PushStreamContent((Stream stream, HttpContent content, TransportContext context) => {
                if(stream != null)
                {
                    using (var writer = new StreamWriter(stream))
                    {
                        writer.WriteLine("data:" + JsonConvert.SerializeObject(DateTime.Now.ToString()) + "\n\n"); ;
                        writer.Flush();
                    }
                }
            }, "text/event-stream");
            return response;
        }
    上面的例子,前端可以在页面上展示后端服务器实时的时间,3s刷新一次
  10. 定位

    经纬度的获取
        function getPosition() {
           if(navigator.geolocation) {
               var box = document.getElementById("showBox");
               box.innerHTML = "正在定位...";
               navigator.geolocation.getCurrentPosition(function(position) {
                   // 需要用户同意定位
                   var latitude = position.coords.latitude;
                   var longitude = position.coords.longitude;
                   box.innerHTML = "您当前的坐标是 " + "经度:" + longitude + ",纬度:" + latitude
               },function (err){
                   // 错误处理
                    if(err.code == 1) {
                        box.innerHTML = "你拒绝了定位";
                    }else if(err.code == 2) {
                        box.innerHTML = "网络问题无法定位";
                    }else if(err.code == 3) {
                        box.innerHTML = "定位超时";
                    }else {
                        box.innerHTML = "定位过程中发生了,未知错误";
                    }
               })
           }else{
               alert("你的浏览器不支持html5地理定位");
           }
       }
    追踪定位
        作者提醒:这个实时定位,当页面在后台和前台之间切换时才会刷新,具体原因未知
        <div id="showBox"></div>   
        <button type="button" id="btn">开始追踪</button>
        <script>
            window.onload = function() {
                var btn = document.getElementById("btn"); 
                var box = document.getElementById("showBox");
                var watchID; 
                btn.onclick = function() {
                    if(watchID){
                        btn.innerHTML = "开始追踪";
                        navigator.geolocation.clearWatch(watchID);
                        watchID = false;
                    }else{
                        btn.innerHTML = "正在获取坐标...";
                        getPosition();
                    }
                }  
                function getPosition() {
                    if(navigator.geolocation) {
                            watchID = navigator.geolocation.watchPosition(function(position) {
                                btn.innerHTML = "停止追踪";
                                if(prevLat != position.coords.latitude || prevLong != position.coords.longitude){
                                    var prevLat = position.coords.latitude;
                                    var prevLong = position.coords.longitude;
                                    var positionInfo = "你的当前坐标是 (" + "纬度: " + position.coords.latitude + ", " + "经度: " + position.coords.longitude + ")";
                                    box.innerHTML = positionInfo;
                                }
                            })
                    }else{
                        alert("你的浏览器不支持html5地理定位");
                    }
                }
            }
        </script>
  11. 拖放功能

    css
        body{
            background: grey;
        }
        #dropBox{
            width: 300px;
            height: 300px;
            border: 5px dashed gray;
            background: lightyellow;
            text-align: center;
            margin: 20px 0;
            color: orange;
        }
        #dropBox img{
            margin: 25px;
        }
    html
        <h2>拖放功能例子</h2>
        <p>将图片拖拽到div中</p>
        <div id="dropBox" ondragover="dragOver(event);" ondrop="drop(event);"></div>
        <img src="./1.jpg" id="img" draggable="true" ondragstart="dragStart(event);" width="250" height="250">
        设置 draggable="true" 表示元素可拖动,默认情况下,选中的文本,图片,带有href属性的a标签都是可以拖动的
    js
        function dragStart(e) {
            e.dataTransfer.effectAllowed = "move"; // 设置拖动的元素可以执行的动作
            e.dataTransfer.setData("Text", e.target.getAttribute("id")); // 设置拖动的数据
        }
        function dragOver(e) {
            // 清除浏览器的默认行为
            e.preventDefault(); 
            e.stopPropagation();
        }
        function drop(e) {
            e.stopPropagation();
            e.preventDefault();
            var data = e.dataTransfer.getData("Text"); // 获取拖动的数据
            e.target.appendChild(document.getElementById(data));
        }
    拖放的相关事件
        ondragstart 用户开始拖元素触发一次
        ondragenter 比ondragstart后调用
        ondragover 用户将拖拽的元素放到容器的上方一直触发
        ondreagleave 当拖拽元素的鼠标位置离开了元素的边界触发一次
        ondrag 拖拽元素一直触发
        ondrop 用户将拖拽的元素,在容器上方松开,触发
        ondragend 只要用户松开了,就触发

转载于:https://www.cnblogs.com/ye-hcj/p/8284499.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值