[笔记12]JavaScript DOM编程艺术_HTML5

Modernizr

网址:https://modernizr.com/

Modernizr 是一个开源的JS库,利用它的富特性检测功能,可以对HTML5文档进行更好的控制。Modernize不会给你添加浏览器不支持的特性。Modernizr能做的是为你提供一些不同的CSS类名以及特性检测(feature-detection)属性。要想现在使用HTML5,Modernizr是必不可少的。

  • 首先修改html的class属性。基于可用的HTML5特性添加额外的类名。要使用Modernizr编写文档,通常都要给html元素添加一个no-js类。
<html class="no-js">

利用这个类,可以在浏览器不支持JS的情况下应用CSS样式。

.nojs selector{
 style properties
}
  • 然后Modernizr会检测浏览器可能支持的各种特性,并相应地添加类名。
    实际情况是浏览器可能会支持部分特性,而不支持另一些特性。这时候,类名中就会间或出现feature和no-feature。
    根据这些类名,可以在CSS中定义相应的增强和退化版本,改善用户体验。如下所示:
.multiplebgs article p{
   /*为支持多背景浏览器编写的样式*/
}
.no-multiplebgs article p{
  /*为不支持多背景的浏览器编写的后备样式*/
}

类似地,Modernizr库也提供了JS特性检测对象,可以在DOM脚本中直接使用:如下

if(!Modernizr.inputtypes.date){
/*不支持本地数据,使用自定义的数据选择脚本*/
 createDatepicker(document.getElementById('birthday'));
}

Modernizr的例子参考链接如下:http://caibaojian.com/modernizr-js.html

视频

缺点:

  • 也有混乱的时候,HTML5的video和audio元素标签很简单,有相应的属性用于显示播放控件或更改播发设置,但是它并未说明支持哪些视频格式。

在每个影片容器中,音频和视频轨道都使用不同的编解码器来编码。编解码器决定了浏览器在播放时应该如何解码音频和视频。编解码器的核心就是一个算法,用于压缩和存储视频,以减少原始文件的大小,可能会损失音频的品质。视频编解码器有很多:H.264、Theora和VP8。

自定义控件

浏览器在显示video元素时,会为其添加一些与浏览器样式统一的标准播放控件。要想自定义这些控件的外观或是添加新的控件,可以通过一些DOM属性来实现。
具体实现参考11章223页

表单

HTML5提供了新的输入控件类型:

  • email,用于输入电子邮件地址
  • url,用于输入URL
  • date,用于输入日期和时间
  • number,用于输入数值
  • range,用于生成滑动条
  • search,用于搜索框
  • tel,用于输入电话号码
  • color,用于选择颜色

增加了新的控件类型,相应的也就增加了新的属性。

我们关注的一个问题是,如果浏览器不支持新的类型和属性时怎么办呢?为了应对不兼容的浏览器,必须使用特性检测来准备另一个方案。

//某个输入类型的控件,可以使用inputtypes.type属性:
if(!Modernizr.inputtypes.date){
   //生成日期选择器的脚本
}
//要检查某个属性,则可以使用input.attribute属性
if(!Modernizr.input.placeholder){
   //生成占位符提示信息的脚本
}

要是没有Modernizer,可以使用inputSupportsType函数来检查。

function inputSupportsType(type) {
    if (!document.createElement) {return false;}
    var input=document.createElement('input');
    input.setAttribute('type',type);
    if(input.type=='text'&&type!='text'){
        return false;
    }else{
        return true;
    }
}
//使用的方式如下:
 if(!inputSupportsType('date')){
  //生成日期选择器的脚本
}

检查特定的属性,可以使用elementSupportsAttribute函数。

function elementSupportAttribute(elementName,attribute){
    if(!document.createElement)return false;
    var temp=document.createElement(elementName);
    return (attribute in test);
}
//使用的方式如下:
if(!elementSupportAttribute('input','placeholder')){
  //生成占位符提示信息的脚本
}

替代方案的主要问题是必须依赖于JS实现同样的功能,因此,还必须考虑到在JS不可用的情况下选择什么输入控件最合适。

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

推荐阅读更多精彩内容