H5泛指: html css js 三个方向的提升 语义化标签 表单类型 过渡 转换 背景 盒子阴影 盒子边框圆角 本地存储 历史管理 拖拽事件 多媒体
属性选择器
[attr=value] 选中属性名称为attr且值完全等于value的元素
[attr=^value] 选中属性名称为attr且值以value开头的元素
[attr$=value] 选中属性名称为attr且值以value结尾的元素
[attr*=value] 选中属性名称为attr且值包含value的元素

伪类选择器
:first-child 选中第一个元素
:last-child 选中最后一个元素
:nth-child(N)选中第 N 个元素
:nth-last-child(N) 选中倒数第 N 个元素

伪类选择器
:before
:after

.clearfix:after{
  content:"";
  display:block;
  height:0;
  clear:both;
  visibility:hidden;
}
//兼容低版本ie
.clearfix{zoom:1}
:before和:after主要用来清除浮动元素
另一种清除浮动的方法是 clear=both 用到这个属性最好是写行内样式 用法就是 在要清除浮动的元素最后添加一个空标签 在这个空标签中写一个行内样式 style="clear:both"
 
边框圆角
border-radius: 1px 1px 1px 1px 1px 1px 1px 1px 
前四个是X轴的半径  后四个是Y轴的半径
 设置正圆 border-radius: 50%;// 这样就是圆形
设置半圆: 
width: 100px;
height: 50px;
border:1px solid black;
background-color: blue;
border-radius: 100px 100px 0 0;
宽度是高度的一半
创建非对称圆角: 
border-radius: 1px 1px 1px 1px / 3px 3px 3px 2px; 
 
语义化标签
头部 <header></header>
导航<nav><nav>
主体<section></section>
侧边栏<aside></aside>
内容区域<article></article>
底部区域 <footer></footer>
遇到没见过的标签不要惊讶: 和div类似只是名字不同而已 (应该是语义化标签)
以上标签在 IE9一下会有兼容问题(会解析成行内元素)
解决办法: 使用 html5shiv.js 来处理不兼容的标签 下载地址 https://github.com/aFarkas/html5shiv
使用方法:(记住 必须在头部引入)
// 只有在IE低版本浏览器才不兼容,只有在IE低版本浏览器才需要去加载这个插件
// 条件注释 
<!--[if lt IE 9]> <script src="html5shiv.min.js"></script> <![endif]-->
<!--[if lte IE 8]>任何东西都可以 内容、标签都可以<![endif]-->
<!--10. 当满足条件的时候 注释内的内容才会去执行-->
<!--11. lte 小于等于 gte 大于等于 lt 小于 gt 大于-->
navigator.userAgent 可以查看当前使用的浏览器
 
表单元素类型
语法: <input type="value">
描述
button 定义可点击的按钮(通常与 JavaScript 一起使用来启动脚本)。
checkbox 定义复选框。
colorNew 定义拾色器。
dateNew 定义 date 控件(包括年、月、日,不包括时间)。
datetimeNew 定义 date 和 time 控件(包括年、月、日、时、分、秒、几分之一秒,基于 UTC 时区)。
datetime-localNew 定义 date 和 time 控件(包括年、月、日、时、分、秒、几分之一秒,不带时区)。
emailNew 定义用于 e-mail 地址的字段。
file 定义文件选择字段和 "浏览..." 按钮,供文件上传。
hidden 定义隐藏输入字段。
image 定义图像作为提交按钮。
monthNew 定义 month 和 year 控件(不带时区)。
numberNew 定义用于输入数字的字段。
password 定义密码字段(字段中的字符会被遮蔽)。
radio 定义单选按钮。
rangeNew 定义用于精确值不重要的输入数字的控件(比如 slider 控件)。
reset 定义重置按钮(重置所有的表单值为默认值)。
searchNew 定义用于输入搜索字符串的文本字段。
submit 定义提交按钮。
telNew 定义用于输入电话号码的字段。
text 默认。定义一个单行的文本字段(默认宽度为 20 个字符)。
timeNew 定义用于输入时间的控件(不带时区)。
urlNew 定义用于输入 URL 的字段。
weekNew 定义 week 和 year 控件(不带时区)。
 
 表单属性:
当你有name属性 浏览器会记录你之前的提交 当你再次输入的时候,会自动给你弹出提示(自动填充功能)
表单元素的属性-->
  autocomplete 设置是否使用自动填充功能 off on 针对当前表单元素
  required 必须属性 加上必填项 不加不去校验

表单的属性
  autocomplete 设置是否使用自动填充功能 off on 针对当前整个表单
  novalidate 是否去进行整个表单的校验
普通表单和密码表单的属性:
  name: 设置当前控件的名称
  value:设置当前控件的默认值
  placeholder: 占位符[虚隐文字]【当前控件的一个提示信息】
  id: 设置当前控件唯一标识的属性【身份证】
  readonly: 设置当前控件为只读模式【当前控件只能看一看,不能输入】
  disabled: 设置当前控件不能输入
  maxlength: 设置当前控件最多能输入多少个字符
  autofocus: 自动获取焦点
提交表单:<input type="submit" name="btn">
  属性: action: 用来指定当前表单控件中的数据要交给哪个后台文件去处理
      method: 用来指定一种数据提交方式  method: get | post
     get: 这种方式提交数据的时候,会将数据在地址栏中显示【安全性差】
     post: 这种方式提交数据的时候,数据会以后台的形式提交给文件【安全】
单选控件: <input type="radio">
  属性: checked: 设置当前控件默认选中
注意:
  默认单选控件不能实现单选效果
  只要给单选空件设置相同的name值即可。\
 多选控件: <input type="checkbox" checked>
  多选控件中设置默认选中项的属性与单选控件一样
 
视差滚动
/*视差滚动:是元素以不同的速度滚动 形成的视觉上的层次感 */
 background-attachment: fixed; 固定背景,当你滚动到这个位置才能完全显示,能实现视差效果
想要实现视差滚动效果需要 jquery.stellar.js 这个插件
使用插件的基本配置
    <div class="sound_bg" data-stellar-background-ratio="0.3"></div>
 需要设置  背景的元素为 background-attachment:fixed 
需要设置  背景的滚动的速度  data-stellar-background-ratio="0.3" 
 初始化
$(function(){
    $.stellar({
        horizontalScrolling:false,//配置横向滚动没有视差效果
        responsive:true //当页面尺寸发生改变 重新初始化插件
    });
});

参数解释: 

名称 说明
horizontalScrolling 和 verticalScrolling 该配置项用来设置视差效果的方向。horizontalScrolling设置水平方向,verticalScro设置垂直方向, 为布尔值,默认为true
responsive 该配置项用来制定load或者resize时间触发时是否刷新页面,其值为布尔值,默认为false
hideDistantElements 该配置项用来设置移出视线的元素是否隐藏,其值为布尔值,若不想隐藏则设置为false
data-stellar-ratio="0.5"(一般设置在标签上) 定义了此元素针对页面滚动的速度比率,比如,0.5为页面滚动的50%,2为页面滚动的200%,所以数值越大,你可以看到页面元素滚动速度越快。
data-stellar-background-ratio 该配置项用在单个元素中,其值为一个正数,用来改变被设置元素的影响速度。 例如 值为0.3时,则表示背景的滚动速度为正常滚动速度的0.3倍。如果值为小数时最好在样式表中设置
js的提升
document.querySelector()[0] 根据选择器获取【单个节点对象】。返回一个节点对象(ID记得加 # 类名加 .)
document.querySelectorAll() 根据标签的name值获取【一组节点对象】。返回一个伪数组
 
添加class 节点.classList.add('要添加的类名')
移除class  节点.classList.remove('要删除的类名')
切换类名(有就删除没有就添加)  节点.classList.toggle('类名')
监测类名是否存在  节点.classList.contains('要检查的类名')
以上分别对应jQuery的 addClass(添加类) removeClass(删除类)  toggleClass(切换类) hasClass(判断是否包含类)
 
自定义属性
非标准的属性,就是自定义属性 标准属性有 name class id title......等等都是标准属性
一般以 data- 开始的属性都可以认为是自定义属性
自定义属性一般是用来存储数据的属性
操作自定义属性应注意
获取自定义属性 节点.dataset.属性名称  或者 节点.dataset['属性名称']
  注意: 属性名称如 data-user-name 要写成 userName 
 
设置和添加自定义属性 节点.dataset.自定义属性名称 = 属性值
 
获取节点对象  节点.getAttribute('属性名'); // 会返回标签的属性的值
设置节点对象  节点.setAttribute('属性名','值'); // 会修改或添加标签属性
删除节点对象  节点.removeAttribute('属性名'); // 会删除标签的属性
注意:自定义标签属性的操作只能够通过元素的getAtrribute、setAttribute、removeAttribute提供的方法操作。 不能直接通过元素点的方式直接获取或设置
案例: 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>tab切换</title>
    <style>
        .tab{
            width: 400px;
            margin: 100px auto;
        }
        .nav{
            width: 100%;
            height: 50px;
        }
        .nav a{
            width: 25%;
            float: left;
            height: 100%;
            line-height: 50px;
            text-align: center;
            background: green;
            color: #fff;
            text-decoration: none;
        }
        .nav a.now{
            background: hotpink;
        }
        .content{
            width: 100%;
            height: 350px;
            overflow: hidden;
        }
        .content section{
            width: 100%;
            height: 100%;
            display: none;
        }
        .content section.active{
            display: block;
        }
    </style>
</head>
<body>
<div class="tab">
    <nav class="nav">
        <a href="javascript:;" data-content="china">国内新闻</a>
        <a href="javascript:;" data-content="other">国际新闻</a>
        <a href="javascript:;" data-content="sports">体育新闻</a>
        <a href="javascript:;" data-content="funny">娱乐新闻</a>
    </nav>
    <div class="content">
        <section id="sports">
            体育新闻123789
        </section>
        <section id="funny">
            娱乐新闻abc
        </section>
        <section id="other">
            国际新闻123456
        </section>
        <section id="china">
            国内新闻123
        </section>
    </div>
</div>
<script>
    (function(index){
        /*1. 当页面初始化的时候 根据索引去初始化默认显示的 页签和内容 */
        //index就是你想初始化的标签和内容的索引
        //console.log(index);
        /*1.1 选中索引所对应的页签*/
        var nav = document.querySelector('.nav');
        var aList = nav.querySelectorAll('a');
        /*需要初始化的A*/
        var initA = aList[index];
        /*加now类*/
        initA.classList.add('now');
        /*1.2 显示当前页签所对应的内容*/
        var initContentId = initA.dataset.content;
        var initContent = document.querySelector('#'+initContentId);
        initContent.classList.add('active');

        /*2. 点击页签对应的切换内容*/
        nav.onclick = function(e){
            /*获取当前点击的页签*/
            var currentA = e.target;
            /*判断是否已经选中*/
            if(currentA.classList.contains('now')) return;
            var oldA = document.querySelector('.nav a.now');
            /*2.1 选中索引所对应的页签 且 清除之前的选中*/
            currentA.classList.add('now');
            oldA.classList.remove('now');
            /*2.2 显示当前页签所对应的内容 且 隐藏之前的选中内容*/
            var currentContentId = currentA.dataset.content;
            var currentContent = document.querySelector('#'+currentContentId);
            currentContent.classList.add('active');

            var oldContentId = oldA.dataset.content;
            var oldContent = document.querySelector('#'+oldContentId);
            oldContent.classList.remove('active');
        }
    })(3);
</script>
</body>
</html>
View Code 
 
拖拽事件
语法:
<div class="box" draggable="true"></div>
draggable 开启拖拽事件
元素.addEventListener('事件名称',function(){//当前元素的拖拽事件});
拖拽元素
ondrag    应用于拖拽元素,整个拖拽过程都会调用
ondragstart应用于拖拽元素,当拖拽开始时调用
ondragleave应用于拖拽元素,当鼠标离开拖拽元素时调用
ondragend应用于拖拽元素,当拖拽结束时调用
目标元素
ondragenter应用于目标元素,当拖拽元素进入时调用
ondragover应用于目标元素,当停留在目标元素上时调用
ondrop应用于目标元素,当在目标元素上松开鼠标时调用
ondragleave应用于目标元素,当鼠标离开目标元素时调用
var box = document.querySelector('.box');
var bigBox = document.querySelector('.bigBox');
/*绑定事件*/
/*当前元素的事件*/
box.addEventListener('drag',function(e){
    // e.preventDefault();
    //当前元素的拖拽事件
    console.log('drag');
});
box.addEventListener('dragstart',function(){
   //当前元素的拖拽开始事件
    console.log('dragstart');
});
box.addEventListener('dragend',function(){
    //当前元素的拖拽结束事件
    console.log('dragend');
});
box.addEventListener('dragleave',function(){
    //当前元素的拖拽离开本身事件
    console.log('dragleave');
});
/*目标元素的事件*/
bigBox.addEventListener('dragenter',function(e){
    // e.preventDefault();
    console.log('dragenter');//进入目标元素事件
});
bigBox.addEventListener('dragover',function(e){
    e.preventDefault();
    //console.log('dragover');//在目标元素上来回移动的事件
});
bigBox.addEventListener('drop',function(e){
    e.preventDefault();
    //不会触发的原因是:浏览器默认行为  禁止放下操作
   // 记得把上边俩个事件也要阻止浏览器默认行为 console.log('drop');//在目标元素上松开鼠标的事件 }); bigBox.addEventListener('dragleave',function(){ console.log('dragleave');//离开目标元素的事件 });

 案例:

 
 
 
 
 
 
 
<!--1. 入口函数:-->
<!--1.1 页面加载完成  去写程序的一个入口-->
<!--1.2 jquery 入口函数  $(function(){})  只有html结构加载完毕触发 -->
<!--1.3 javascript 入口函数 window.onload = function(){} 需要所有的页面资源加载完毕-->
<!--2. 自调用函数 -->
<!-- (function(){})(); !function(){}();  -->

 

本地存储
在H5中,本地存储有两个,一个是永久存储localstorage,一个是会话存储sessionStorage
他们可以把一些数据存储在浏览器端
他们的应用场景大概是有,记住用户信息,记录阅读历史等等
他们和cookie的区别
区别 sessionStorage localstorage cookie
存储量 5M(具体看浏览器版本) 5M(具体看浏览器版本) 4KB
存放地点 浏览器 浏览器 浏览器
发送http请求时 不会带上 不会带上 会带上
生命周期 浏览器关闭后不存在 永久保留 过期日期
访问权限 同源网站 同源网站 同源网站
 
 
 
 
 
 
 
sessionStorage是会话存储,当关闭当前会话数据就会自动清除,一个会话就可以认为是发送一请求,服务器处理,响应到浏览器,关闭当前页面的一个完整的过程
localStorage是存储在浏览器物理空间中,如果你不手动的清除,理论上可以永久存储
 
语法:(两种语法完全一样) 【存储的数据只能是字符串
存入:localStorage.setItem(key,value)
     sessionStorage.setItem(key,value)
获取:localStorage.getItem(key)
     sessionStorage.getItem(key) 
移除:localStorage.removeItem(key)
     sessionStorage.removeItem(key) 
清除: localStorage.clear()
     sessionStorage.clear()

 小知识: 在使用getItem是 最好在获取的时候 在后边加一个'[]' 这样就不会获取到null 

获取本地存储的字符串数据是 将其转换为数组,一开始的时候没有当前存储的历史数据 所以也没有对应的key,为了避免以后的错误,这里返回一个空值数组

      var iHistory = JSON.parse(localStorage.getItem('user_History') || '[]')