Html5

DTD

DTD可定义合法的XML文档搭建模块,它使用一系列合法的元素来定义文档的结构
HTML5不基于SGML,所有不需要引用DTD

新增的标签

结构标签
<article></article>      //定义一篇文章
<header></header>      //定义头部
<nav></nav>      //定义导航
<section></section>      //定义一个区域
<aside></aside>      //定义页面内容部分的侧边栏
<hgroup></hgroup>      //定义文件中一个区块的相关信息
<figure></figure>      //定义一组媒体内容以及它们的标题
<figcaption></figcaption>      //定义figure元素的标题
<footer></footer>      //定义一个页面或一个区域的底部
<dialog></dialog>      //定义一个对话框    
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <header>
        <div>logo</div>
        <nav>
            <a href="">1</a>
            <a href="">2</a>
            <a href="">3</a>
            <a href="">4</a>
        </nav>
    </header>
    <section>
        <hgroup>
            <h2>titile</h2>
            <h3>文/greentea</h3>
            <h4>简介</h4>
        </hgroup>
        <aside>
            <a href="">section 1</a>
            <a href="">section 2</a>
            <a href="">section 3</a>
        </aside>
        <article>
            文章....
        </article>
    </section>
    <section>
        <figure>
            <figcaption>title</figcaption>
            <div class="video">...</div>
        </figure>
    </section>
    <section>
        <dialog>
            <dt>a:?</dt>
            <dd>b:!</dd>
            <dt>a:?</dt>
            <dd>b:!</dd>
            <dt>a:?</dt>
            <dd>b:!</dd>
        </dialog>
        <dialog>
            <dt>a:?</dt>
            <dd>b:!</dd>
            <dt>a:?</dt>
            <dd>b:!</dd>
            <dt>a:?</dt>
            <dd>b:!</dd>
        </dialog>
    </section>
    <footer>
    </footer>
</body>
</html>

补充

  • header/section/aside/article/footer 不要嵌套
  • header/section/footer > aside/article/figure/hgroup/nav > div/figcaption
多媒体标签
<video src=""></video>   //定义一个视频
<audio src=""></audio>   //定义音频内容
<source>   //定义媒体资源
<canvas></canvas>   //定义图片
<embed src="" type="">   //定义外部的可交互的内容或插件,比如flash
<!-- 音频 -->
<audio src="../source/passion.mp3" autoplay="autoplay" loop="-1" controls="controls">这段文字显示就说明不支持此标签</audio>
<!-- autoplay自动播放,loop -1 无限循环 controls控制器 -->
<!-- 音频兼容的写法 -->
<audio autoplay="autoplay">
    <source src="../source/passion.mp3" type="audio/mpeg">
</audio>
<!-- 视频 -->
<video src="../source/passion.mp4" controls="controls"></video>
<!-- 视频的另一种写法 -->
<video controls="controls" width="1024" height="768">
    <source src="../source/passion.mp4" type="video/mp4">
</video>

embed

<embed src="../source/hb.swf" width="1024" height="768">
状态标签
<meter></meter> 状态(气压,气温)
<progress></progress> 状态(安装,加载)
<meter value="220" min="20" max="380" low="200" high="240" optimum="220"></meter>
<meter value="0.75">75%</meter>

<progress value="30" max="100"></progress>
<progress max="100"></progress>    //注释value的代码可以有加载效果
列表标签
<datalist></datalist>   //为input标记定义一个下拉列表,配合option
<details></details>     //标记定义一个元素的详细内容,配合summary
<input type="text" placeholder="选择品牌" list="phonelist">
<datalist id="phonelist">
    <option value="iphone">iphone</option>
    <option value="samsung">samsung</option>
    <option value="huawei">huawei</option>
    <option value="meizu">meizu</option>
</datalist>
<details open="open>    //默认打开
    <summary>title</summary>
    <p>内容</p>
</details>
注释标签
<!-- rp不要放在rt标签内 -->
<p>我们来<ruby>夼<rp>(</rp><rt>Kuang</rt><rp>)</rp></ruby>一个话题</p>
其他标签
<mark></mark>   //定义有标记的文本
<output></output>   //定义一些输出类型,计算表单配合oninput事件
<mark>important</mark> 
<form oninput="totalprice.value=parseInt(price.value)*parseInt(number.value)">
    <input type="text" id="price" value="5000">
    * <input type="text" id="number" value="1">
    = <output name="totalprice" for="price number"></output>
</form>

属性

input新增类型
<!-- 在手机中会有体现 -->
<input type="email" name="email">
<input type="url" name="url">
<input type="tel" name="tel">
<input type="number" name="number"> <!-- 只能输入数字 -->
Date Pickers Input

Date //日,月,年
Month //月,年
Week //周,年
Time //时间(小时和分钟)
Datetime //选取时间,日,月,年(UTC时间)
Datetime-local //选取时间,日,月,年(本地时间)

date: <input type="date" name="date">
month: <input type="month" name="month">
week: <input type="week" name="week">
time: <input type="time" name="time">
datetime: <input type="datetime" name="datetime">
datetime-local: <input type="datetime-local" name="datetime-local">
input新增类型
range: <input type="range" name="range">
search: <input type="search" name="search">
color: <input type="color" name="color">
表单新增属性
  1. autocomplete //from或input自动完成功能
  2. autofocus //页面加载时,域自动地获得焦点
  3. multiple //规定在域中可选择多个值
  4. placeholder //提供一种提示
  5. required //规定必须在提交之前填写输入域(不能为空)
<form action="" autocomplete="on">
    //placeholder使用于:text/search/url/telephone/email/password
    <input type="text" name="urname" placeholder="输入用户名" required="required">
    <input type="text" name="text" autofocus="autofocus">
    <input type="email" name="email" autocomplete="off">
    <input type="file" multiple="multiple">
    <input type="submit">
</form>
链接标签属性
sizes: <link rel="stylesheet" href="icon.gif" type="image/gif" sizes="16*16">
<!-- base标签写在head标签内,可以让所有链接都新窗口打开 -->
target: <base href="http:localhost" target="_blank">
超链接: a:media="" <!-- 表示对设备进行优化 -->
    a:hreflang="zh"  <!-- 设置语言 -->
    a:rel="external" <!-- 设置超链接的引用,这里超链接为外部链接 -->
script属性

defer:加载完脚本后并不执行,而是等整个页面加载完之后再执行 只能兼容IE
async:加载完脚本后立即执行,不用等整个页面都加载完,属于异步执行 兼容主流浏览器

<script defer="defer" src="./js/common1.js"></script>
<script async="async" src="./js/common2.js"></script>
ol标签属性

Start 起始值
Reversed 倒叙排列

<ol start="5" reversed="reversed">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ol>
其他

离线应用

<html lang="en" manifest="cache.manifest">

HTML5本地存储

localStorage 和 sessionStorage

相同点

  1. setItem() 设置
  2. getItem() 获取
  3. removeItem() 删除
  4. 使用clear()删除所有内容
  5. 使用length获取存储内容个数
  6. 使用key()获取存储字段
image.png
localStorage.length   //2
localStorage.key(0)    //key1
localStorage.clear()   //清空

sessionStorage同理

不同的存储时效

localStorage存储是持久化的,而sessionStorage存储会在网页回话结束后失效

不同的存储容量

localStorage 大约2-5Mb
sessionStorage 存储容量不一,部分浏览器不受限

Storage的注意点

  1. 防止存储容量溢出,使用try catch
  2. 只接受string
  3. sessionStorage失效机制
    刷新页面并不会失效
    相同URL不同标签页不能共享sessionStorage

IndexedDB数据库

1.indexedDB数据库是一种事物型数据库
2.是NoSQL数据库
3.使用JS对象存储数据

创建与删除

open()接收两个参数,第一个参数是数据的库的名,第二个参数是版本号

indexedDB.open('testDB',1)    //返回IDBOpenDBRequest对象,而我们希望得到的DB对象在其result属性中
indexedDB.deleteDatabase('testDB')
image.png

这条指令请求的响应是一个 IDBDatabase对象,这就是IndexedDB对象

image.png

创建表

indexedDB.createObjectStore(osName,{autoIncrement : true})    //设置主键类型

HTML5离线存储

传统拖拽

<style>
    .dialog{position: absolute;left: 100px;top: 50px;width: 200px;}
    .title{background: #d7def0;width: 100%;height: 50px;line-height: 50px;cursor: move;}
    .content{background: #f0f0f0;width: 100%;height: 200px;}
</style>
<body>
    <div id="dialog" class="dialog">
        <div class="title" id="title">title</div>
        <div class="content"></div>
    </div>
    <script src="https://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>
    <script>
        $(".content").text('123')
        var isMouseDown = false;
        var lastPoint = {};
        $("#dialog").on("mousedown",function(e){
            console.log('1')
            isMouseDown = true;
            lastPoint.x = e.pageX;
            lastPoint.y = e.pageY;
        }).on("mousemove",function(e){
            console.log(2)
            if(isMouseDown){
                var $dialog = $("#dialog"); 
                var targetX = parseInt($dialog.css('left')) + e.pageX - lastPoint.x;
                var targetY = parseInt($dialog.css('top')) + e.pageY - lastPoint.y;
                //总长,让窗口不超过window
                allX = targetX + parseInt($(".dialog").css('width'))
                allY = targetY + parseInt($(".dialog").css('height'))
                if($(window).width() >= allX  && targetX >= 0 ){
                    $dialog.css('left', targetX + "px");
                    lastPoint.x = e.pageX;
                }
                if($(window).height() >= allY && targetY >= 0){
                    $dialog.css('top', targetY + "px");
                    lastPoint.y = e.pageY;
                }
            }
        }).on("mouseup",function(){
            isMouseDown = false;
            lastPoint = {}
        })
    </script>
</body>

鼠标事件位置的四种方式

clientX,clientY:相对于window的(0,0)
pageX,pageY:相对于window的(0,0),但是不同的是如果有滚动条,会加上滚动条的距离
offestX,offestY:当前对象和鼠标之间的距离
screenX,screenY:相对于屏幕左上角

HTML5拖拽

  • draggable 是否能被拖拽
  • ondragstart 开始拖拽
  • ondrop 元素放置在目标区域时触发(只触发一次),并且是成功拖拽进去后
  • ondragover 元素正在拖动到放置目标时触发(拖动时一直在不停的触发)
  • ondragenter 元素放入到有效的放置目标时触发
  • ondragleave 元素移出放置目标是触发
  • ondragend 拖拽结束时触发,不管是否拖拽成功,只要不拖拽,即可触发
  • ondrag 拖动时触发(拖动时一直在不停的触发)
<head>
    <meta charset="UTF-8">
    <title>html5</title>
    <style>
        .container{width: 200px;height: 200px;background-color: yellow;}
        .containerDrop{background-color: green;}
        .target{width: 100px;height: 100px;background-color: pink;}
        .hide{display: none;}
    </style>
</head>
<body>
    <div class="container" id="container" ondrop="drop(event)" ondragover="dragover(event)"
     ondragenter="dragenter(event)" ondragleave="dragleave(event)" ondragend="dragendContainer(event)"></div>
    <div class="target" id="target" draggable="true" ondragstart="dragstart(event)" ondrag="drag(event)" ondragend="ondragendTarget(event)"></div>
    ![](img.png)
    <script src="https://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>
    <script>
        var dragstart = function(e){    
            e.dataTransfer.setData('text',e.target.id);
            //实现拖动时不再克隆,而是出现一个图片,并且将jquery对象转化为dom对象
            e.dataTransfer.setDragImage($("#image").clone().removeClass('hide')[0],0,0);    
        }
        var drop = function(e){
            e.preventDefault();
            var data = e.dataTransfer.getData('text');
            e.target.appendChild(document.getElementById(data));
            console.log('drop')
        }
        var dragover = function(e){
            e.preventDefault()
            console.log('dragover')
        }
        var dragenter = function(e){
            e.preventDefault();
            $("#container").addClass('containerDrop');
        }
        var dragleave = function(e){
            e.preventDefault();
            $("#container").removeClass('containerDrop')
        }
        var dragendContainer = function(e){
            // console.log('dragendContainer')
        }
        var drag = function(e){
            // console.log('drag');
        }
        var ondragendTarget = function(e){
            // consoel.log('ondragendTarget')
        }
    </script>
</body>

拖拽案例

我的github:https://github.com/Greentea1120/html5-demo

拖拽插件

http://pep.briangonzalez.org/
https://github.com/skidding/dragdealer

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342